아래와 같이 텍스트 파일에 다음 데이터 세트가 저장되어 있습니다.
Case name Case_12
d1 0.2
d2 0.1
d3 2.2
d4 1.29
d5 0
d6 -1.10
d7 0.007
d8 -0.421
d9 -0.680
d10 -0.206
Case name Case_1
d1 0.2
d2 0.1
d3 2.2
d4 1.17
d5 0
d6 -1.09
d7 0.003
d8 -0.458
d9 -0.640
d10 -0.030
Case name Case_2
d1 0.2
d2 0.1
d3 2.2
d4 1.15
d5 0
d6 -1.17
d7 0.005
d8 -0.504
d9 -0.670
d10 -0.023
출력이 원하는 방식으로 다음 데이터를 사후 처리하는 방법이 있습니까?
Case name d1 d2 d6 d7 d8 d9 d10
Case_1 0.2 0.1 -1.09 0.003 -0.458 -0.640 -0.030
Case_2 0.2 0.1 -1.17 0.005 -0.504 -0.670 -0.023
Case_12 0.2 0.1 -1.10 0.007 -0.421 -0.680 -0.206
도와주셔서 감사합니다!
답변1
각 그룹의 s 개수가 d
동일하고 정렬되어 있으면 다음과 같이 할 수 있습니다.
<infile awk -v d=10 '
BEGIN{ printf "Case_name" ;
while (i++<d) { printf FS "d"i; };
print "";
}
/Case name/{ if (line) { print line }; line=$NF; next }
{ line = line FS $NF; }
END{ print line }' |column -t
d
s에서 헤더를 수동으로 생성 하지 않는 또 다른 대안은 다음과 같습니다 .
<infile awk '
/Case name/{ if (h && !is_h) { print h; is_h=1 };
if (line) { print line; };
h="Case_name"; line= $NF;
next;
}
!is_h { h= (h? h FS $1 : $1); }
{ line= (line? line FS $NF : $NF); }
END{ print line }' |column -t
산출:
Case_name d1 d2 d3 d4 d5 d6 d7 d8 d9 d10
Case_12 0.2 0.1 2.2 1.29 0 -1.10 0.007 -0.421 -0.680 -0.206
Case_1 0.2 0.1 2.2 1.17 0 -1.09 0.003 -0.458 -0.640 -0.030
Case_2 0.2 0.1 2.2 1.15 0 -1.17 0.005 -0.504 -0.670 -0.023