이런 데이터가 있어요
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
설명하다:
- 두 줄을 모두 패턴 공간에 유지하세요.
- 패턴 공간의 마지막 필드를 확인하여 두 행을 연결해 보세요.
- 마지막 필드를 동일하게 유지하면서 이 조인 프로세스를 반복합니다.
- 그런 다음 서로 다른 경우 공백으로 구분된 모든 이전 행의 첫 번째 필드와 공통 마지막 필드를 포함하는 첫 번째 부분을 인쇄합니다. 이 부분을 삭제하고 다시 방문해 보세요.