동일한 마지막 열을 기준으로 행으로 그룹화

동일한 마지막 열을 기준으로 행으로 그룹화

이런 데이터가 있어요

15 23
16 23
17 24
18 24

마지막 열의 데이터를 기반으로 첫 번째 열의 데이터를 결합/그룹화하고 싶습니다.

15 16 23
17 18 24

어떻게 해야 하나요 awk?

답변1

그리고 awk:

awk '{ seen[$2]= seen[$2]? seen[$2]FS$1:$1 } 
    END{ for (x in seen) print seen[x], x }' infile
15 16 23
17 18 24

seen여기서는 열의 키 $2와 열의 값이 포함된 배열을 사용합니다 $1. 각 값의 키가 $2동일한 경우 값은 배열의 이전 값 끝에 추가되고 END최종 값이 먼저 인쇄된 다음 해당 키가 인쇄됩니다.

삼항 조건은 해당 키 앞에 배열에 값이 있는지 확인하는 데 사용됩니다. 그렇다면 새 값을 기본값 끝에 추가합니다.에프생산하다에스FS그렇지 않으면 해당 값을 첫 번째 값으로 추가하면 됩니다 .

답변2

awk '{AA[$2]=AA[$2]" "$1}END{for(i in AA){print AA[i]" "i}}' datafile.txt

답변3

sed -Ee '
   :join
      $!N
      s/(\s\S+)\n(.*\1)$/ \2/
   tjoin
   P;D
'  input.txt

설명하다:

  1. 두 줄을 모두 패턴 공간에 유지하세요.
  2. 패턴 공간의 마지막 필드를 확인하여 두 행을 연결해 보세요.
  3. 마지막 필드를 동일하게 유지하면서 이 조인 프로세스를 반복합니다.
  4. 그런 다음 서로 다른 경우 공백으로 구분된 모든 이전 행의 첫 번째 필드와 공통 마지막 필드를 포함하는 첫 번째 부분을 인쇄합니다. 이 부분을 삭제하고 다시 방문해 보세요.

관련 정보