편집하다:

편집하다:

내 파일에는 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 }'

관련 정보