두 번째 파일의 정보를 기반으로 첫 번째 파일의 정보를 어떻게 그룹화할 수 있나요?

두 번째 파일의 정보를 기반으로 첫 번째 파일의 정보를 어떻게 그룹화할 수 있나요?

두 개의 파일이 있습니다.

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]. 줄의 모든 필드를 인쇄한 후 printprint newline을 사용합니다.

관련 정보