텍스트 파일의 산술 연산

텍스트 파일의 산술 연산

다음과 같은 데이터 파일이 있습니다.

569158.650000 8.859e-02
579175.970000 8.659e-02
599177.990000 8.659e-02

첫 번째 열에서 첫 번째 행 값을 추출해야 합니다. 그런 다음 첫 번째 열을 3600으로 나누어야 합니다. 마지막으로 다음과 같이 결과를 새 데이터 파일의 첫 번째 열로 붙여넣어야 합니다.

0 8.859e-02
2.78 8.659e-02
8.33 8.659e-02

코드를 사용하여 위의 계산을 어떻게 수행할 수 있습니까?

답변1

awk문제를 해결하기 위한 oneliner는 다음과 같습니다 .

awk '{printf "%.2f %s\n", $1/3600, $2}'

모든 행에 대해 이는 단순히 첫 번째 필드를 3600( )으로 나누고 두 개의 소수점( ) 뒤에 공백이 $1/3600있는 부동 소수점으로 인쇄하고 두 번째 필드( )를 문자열( )로 인쇄한 다음 마지막으로 줄바꿈으로 인쇄합니다. 예를 들어 소수점 이하 6자리로 반올림하려면 로 변경하면 됩니다 .%.2f$2%s%.2f%.6f

예시 실행

$ cat <data
569158.650000 8.859e-02
579175.970000 8.659e-02
599177.990000 8.659e-02
$ awk '{printf "%.2f %s\n", $1/3600, $2}' <data >new_data
$ cat <new_data 
158.10 8.859e-02
160.88 8.659e-02
166.44 8.659e-02
$ awk '{printf "%.6f %s\n", $1/3600, $2}' <data
158.099625 8.859e-02
160.882214 8.659e-02
166.438331 8.659e-02

답변2

#!/bin/bash                                                                     
div=3600 #Divisor
scale=2  #Scale for output. Number of digits after decimal point.
while read -r line #Read file into variable line, line by line.
do
    firstnum=$(echo $line | cut -d " " -f 1) #Pick the first number field
    secondnum=$(echo $line | cut -d " " -f 2) #Pick the second number field
    firstnum=$(echo "scale=${scale}; ${firstnum}/${div}" | bc -l) #Divide by $div with $scale places after decimal point.
    echo "${firstnum} ${secondnum}" >> output #Output first and second column, seperated by space,to file named output.
done < input #input is name of input file.

이 스크립트는 input말씀하신 형식으로 이름이 지정된 파일을 읽고 이름이 output.

먼저 줄을 두 개의 필드로 자른 다음 첫 번째 필드를 3600으로 나누고 두 개의 소수점을 인쇄한 다음 줄의 새 숫자와 두 번째 숫자를 출력이라는 파일에 인쇄합니다.

오류 검사를 수행하지 않습니다. 오류가 발생하면 YMMV.

관련 정보