다음과 같은 텍스트 파일이 있습니다.
# MarkerIndex
# TiltAngle (degrees)
# PositionX (px)
# PositionY (px)
#
0 -62.450 1526.64 1205.00
0 -60.460 1507.84 1205.36
8 15.890 1535.96 2281.44
8 17.890 1538.96 2281.40
8 19.890 1542.60 2282.08
8 21.900 1545.96 2282.32
8 23.900 1550.64 2282.40
8 25.900 1554.52 2281.68
8 28.000 1559.36 2281.88
8 30.090 1563.56 2281.32
8 32.190 1568.64 2280.80
8 34.280 1573.12 2280.56
처음 두 열을 동일하게 유지하고 세 번째와 네 번째 열을 4로 나누고 싶습니다. 어떻게 해야 합니까?
답변1
이 작업을 수행하려면 다음 명령을 사용할 수 있습니다.앗이것은 텍스트 처리, 파일 연산 등을 위한 표준 bash 도구입니다.
입력 파일이 변경된 것을 확인했습니다. 살펴 printf
보겠습니다.여기매개변수 형식을 정의하는 방법 NR<=5
처음 5줄에도 적용되며 변경하지 않고 헤더로 인쇄합니다 .
awk 'NR<=5 {print; next} {$3=$3/4; $4=$4/4}
{printf "%3s %8.3f %8.2f %8.2f\n", $1, $2, $3, $4}' file
산출:
# MarkerIndex
# TiltAngle (degrees)
# PositionX (px)
# PositionY (px)
#
0 -62.450 381.66 301.25
0 -60.460 376.96 301.34
8 15.890 383.99 570.36
8 17.890 384.74 570.35
8 19.890 385.65 570.52
8 21.900 386.49 570.58
8 23.900 387.66 570.60
8 25.900 388.63 570.42
8 28.000 389.84 570.47
8 30.090 390.89 570.33
8 32.190 392.16 570.20
8 34.280 393.28 570.14
답변2
다음 bash 스크립트는 처음 두 열을 있는 그대로 붙여넣고 다음 2개 열을 4로 나눈 값을 output.txt 파일에 붙여넣습니다.
#!/bin/bash
file="/path/file.txt"
while IFS= read -r line
do
col1=$(echo "$line" | awk {'print $1'})
col2=$(echo "$line" | awk {'print $2'})
col3=$(echo "$line" | awk {'print($3/4)'})
col4=$(echo "$line" | awk {'print($4/4)'})
echo "$col1 $col2 $col3 $col4" >> output.txt
done < "$file"
이것이 당신이 원하는 것이기를 바랍니다.