두 개의 파일이 있습니다.
File1:
234 235 283
567
1001
1002 1009
file2:
234 235 283 567 1001 1002 1009
1 1 2 1 2 0 1
0 0 0 0 0 2 2
1 2 2 2 2 2 2
I want in the output the rows in file2 be grouped similar to file 1:
output:
234 235 283 567 1001 1002 1009
1 1 2 1 2 0 1
0 0 0 0 0 2 2
1 2 2 2 2 2 2
최종 출력에서는 그룹의 숫자 사이에 공백이 없어야 하며 첫 번째 줄이 더 이상 존재하지 않아야 합니다. 최종 출력:
112 1 2 01
000 0 0 22
122 2 2 22
어떤 제안이 있으십니까?
답변1
$ awk 'FNR==NR{n+=NF;a[n]=" ";next} FNR>1{for(i=1;i<=NF;i++)printf "%s%s",$i,a[i]; print""}' file1 file2
112 1 2 01
000 0 0 22
122 2 2 22
어떻게 작동하나요?
먼저 file1
각 줄의 필드 수를 읽고 사용하여 출력에서 공백을 삽입할 위치를 결정합니다. 그런 다음 file2를 읽고 공백을 삽입합니다.
FNR==NR{n+=NF;a[n]=" ";next}
이 명령은 첫 번째 파일을 읽을 때 실행됩니다.
NF
현재 행의 필드 수입니다.n
표시된 필드의 누적 수입니다.a
각 배열에 공백을 삽입 합니다n
. (다른 값은 기본적으로 빈 문자열로 설정됩니다.)FNR>1{for(i=1;i<=NF;i++)printf "%s%s",$i,a[i]; print""}
첫 번째 줄 이후의 줄에서는 각 필드를 인쇄하고
i
그 뒤에 숫자를 인쇄합니다a[i]
. 줄의 모든 필드를 인쇄한 후print
print newline을 사용합니다.