내 파일에는 6줄이 있습니다. 파일에서 특정 행의 평균만 구하면 되고, 다른 행은 그대로 유지되어야 합니다. 다른 선은 그대로 두고 A1과 A2, B1과 B2의 평균을 계산해야 합니다. n
총 여러 개의 열이 있습니다.
입력하다:
A1 1 1 2
A2 5 6 1
A3 1 1 1
B1 10 12 12
B2 10 12 10
B3 100 200 300
산출:
A1A2 3 3.5 1.5
A3 1 1 1
B1B2 10 12 11
B3 100 200 300
스크립트는 다음과 같습니다. 그러나 출력은 탭으로 구분되지 않습니다. 탭으로 구분하려면 어떻게 해야 하나요?
$ cat tst.awk
$1 ~ /^[AB]1$/ { for (i=2;i<=NF;i++) val[$1,i]=$i; next }
$1 ~ /^[AB]2$/ { p=$1; sub(2,1,p); $1=p $1; for (i=2;i<=NF;i++) $i=($i + val[p,i])/2 }
{ print }
$ awk -f tst.awk file | column -t
A1A2 3 3.5 1.5
A3 1 1 1
B1B2 10 12 11
B3 100 200 300
답변1
BEGIN { OFS="\t" }
awk 스크립트 시작 부분 { print }
에 를 추가하고 변경 {print $1, $2, $3, $4}
하면 awk의 출력 필드 구분 기호가 기본 공백에서 탭으로 변경됩니다.
편집하다:
n개 열의 경우 {$1 = $1; print}
대신 을 사용할 수 있습니다 {print}
. 이것이 내부적으로 어떻게 작동하는지 잘 모르겠지만 테스트해 보니 작동했습니다.
답변2
awk가 하나 더 있으면 이 작업을 수행할 수 있습니다.
awk -f tst.awk file | column -t | awk -v OFS='\t' '{ print $1,$2,$3,$4 }'