AWK를 사용하여 홀수 행과 짝수 행을 열로 인쇄하는 방법은 무엇입니까?

AWK를 사용하여 홀수 행과 짝수 행을 열로 인쇄하는 방법은 무엇입니까?

R의 출력이 있고 출력을 올바르게 인쇄해야 합니다. 홀수 행과 짝수 행을 해당 열로 인쇄해야 합니다.

원본 파일

4             4             4             4             4 
-3.592311e+00 -3.360352e+00 -3.063397e+00 -3.660137e+00  8.053911e+00 
            4             4             4             4             4 
 1.077868e+01 -2.455155e+00  6.214082e+00  5.311552e+00  5.311552e+00
       10            10            10            10            10 
-4.394679e+00 -2.527588e+00  7.716434e+00  5.001199e+00  2.653916e+00 
           10            10            10            10            10 
 3.673181e+00  3.721885e+00  3.464234e+00 -4.363173e-01  6.849429e-01

원하는 출력

    4 -3.592311e+00
    4 -3.360352e+00
    4 -3.063397e+00
    4 -3.660137e+00
    4 8.053911e+00
    4 1.077868e+01
    4 -2.455155e+00
    4 6.214082e+00
    4 5.311552e+00
    4 5.311552e+00
   10 -4.394679e+00
   10 -2.527588e+00
   10 7.716434e+00
   10 5.001199e+00
   10 2.653916e+00 
   10 3.673181e+00
   10 3.721885e+00 
   10 3.464234e+00
   10 -4.363173e-01
   10 6.849429e-01

다음 코드를 사용했지만 원하는 것을 제공하지 않습니다.

awk '{ for (i = 1; i <= NF; i++) f[i] = f[i] " " $i ; if (NF > n) n = NF } END { for (i = 1; i <= n; i++) sub(/^ */, "", f[i]) ; for (i = 1; i <= n; i++) print f[i] } ' file

답변1

이는 짝수 행과 홀수 행을 적절한 배열로 분할하는 데 의존하는 awk 방법입니다.

$ awk 'NR%2 !=0 {split($0,col1)}; NR%2 == 0 {split($0,col2); for (i=1;i<=length(col1);i++) print col1[i],col2[i]};' inpu>
4 -3.592311e+00
4 -3.360352e+00
4 -3.063397e+00
4 -3.660137e+00
4 8.053911e+00
4 1.077868e+01
4 -2.455155e+00
4 6.214082e+00
4 5.311552e+00
4 5.311552e+00
10 -4.394679e+00
10 -2.527588e+00
10 7.716434e+00
10 5.001199e+00
10 2.653916e+00
10 3.673181e+00
10 3.721885e+00
10 3.464234e+00
10 -4.363173e-01
10 6.849429e-01

작동 원리는 매우 간단합니다. NR % 2 != 0이 줄이 홀수 줄인지 짝수 NR % 2 == 0줄인지 알려줍니다. 홀수 행에서는 전체 행을 배열로 분할합니다. 짝수 행에서는 두 배열을 항목별로 분할하여 인쇄합니다. 이 프로세스는 마지막 행에 도달할 때까지 교대로 반복됩니다.

물론 이는 기둥 사이의 공간을 늘리는 등의 방법으로 개선될 수 있습니다. 이 방법은 완벽하지는 않지만 원본 파일의 각 행에 동일한 수의 필드가 있는 특정 경우에 맞게 조정되었습니다.

관련 정보