공백으로 구분된 파일에서 주어진 열에 숫자를 곱하는 awk 코드

공백으로 구분된 파일에서 주어진 열에 숫자를 곱하는 awk 코드

공백으로 구분된 파일이 있습니다. 특정 열에 대해 몇 가지 수학 연산을 수행하고 싶습니다. 예를 들어, 열 2에 1e6을 곱하고 싶습니다. 다음 명령을 사용할 수 있습니다.

awk 'BEGIN { FS=","; OFS=","; } {print $1,$2=$2*1e6,$3,$4}' result.txt

내 문제는 내 파일에 여러 개의 열이 포함될 수 있다는 것입니다. 이 경우, awk내 명령은 무엇이어야 합니까? 내 파일에 25개의 열이 있고 15번째 열에 100을 곱하고 싶다고 가정해 보겠습니다. 에서 이 작업을 어떻게 수행합니까 awk?

답변1

모든 필드를 인쇄하는 대신 전체 행을 인쇄할 수 있습니다 $0.

이것은 우리가 할 수 있기 때문에 작동합니다변화필드에 데이터를 할당하여

예를 들어

$2=$2*100

두 번째 필드를 업데이트하고 나머지 필드는 변경하지 않고 그대로 둡니다.

% echo '1 2 3 4' | awk '{$2=$2*100; print $0}'
1 200 3 4

print예를 들어 기본값을 사용하여 범위를 좁힐 수 있습니다.$0

awk '{$2=$2*100; print}'

기본 작업을 사용할 수도 있습니다.

awk '{$2=$2*100} 1'

그러나 일반적으로 다른 사람들이 코드를 읽고 이해하기가 더 쉽기 때문에 더 긴 버전을 권장합니다. 코드의 유지 관리성은 단순성만큼 중요합니다.

awk '{$2=$2*100; print $0}'

답변2

열 수를 알 필요는 없습니다. 필요한 열을 업데이트하고 awk다시 조립하기만 하면 됩니다.

awk '{ $15 *= 100 } 1' file.csv

NF하지만 필요한 경우 다음과 같이 사용할 수도 있습니다.

awk '{ $15 *= 100; for(i=1; i<=NF; i++) printf(" %d", $i); print "\n" }' file.csv

관련 정보