쉘 스크립트를 사용하여 특정 열 번호 나누기

쉘 스크립트를 사용하여 특정 열 번호 나누기

다음과 같은 텍스트 파일이 있습니다.

# 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"

이것이 당신이 원하는 것이기를 바랍니다.

관련 정보