단일 열 값을 기준으로 여러 행 병합

단일 열 값을 기준으로 여러 행 병합

다음과 같은 입력 파일이 있습니다.

  3 1 10 1 6  
  9 4 2  4 1  
  9 2 2  2 1

다섯 번째 열 값을 기준으로 두 행을 병합하고 싶습니다. 출력은 다음과 같습니다.

 3 1 10 1 6  
 9 4 2  4 9 2 2  2 1

누구든지 이것을 설명할 수 있나요?

감사해요

답변1

펄 사용:

$ perl -lane 'push @{$vals{$F[4]}}, @F[0..3];
              END { $, = " "; for $v (sort keys %vals) { print @{$vals{$v}}, $v } }' input.txt
9 4 2 4 9 2 2 2 1
3 1 10 1 6

awk를 사용하세요:

$ awk '{vals[$5] = vals[$5] $1 " " $2 " " $3 " " $4 " "}
       END { for (v in vals) print vals[v] v }' input.txt
9 4 2 4 9 2 2 2 1
3 1 10 1 6

답변2

다음 명령을 사용해보십시오. 훌륭하게 작동합니다.

  awk 'NR<3{$5="";print $0}' filename > o1

     o=`awk 'NR==1{print $NF}' filename`

    awk 'NR==3{print $0}' filename| sed '1i '$o''  > o2

    paste o1 o2| sed -r "s/\s+/ /g"

관련 정보