Linux uniq: 다른 주석을 무시하고 목록을 uniq하는 방법

Linux uniq: 다른 주석을 무시하고 목록을 uniq하는 방법

원본 데이터(abc.csv):

8|AAAAA_001|0|
8|AAAAA_002|0|
8|AAAAA_003|0|
8|AAAAA_004|0|
8|AAAAA_005|0|AAAAA_005
8|AAAAA_006|0|
9|BBBBB_001|0|
9|BBBBB_002|0|
9|BBBBB_003|0|BBBBB_003
9|BBBBB_004|0|
9|BBBBB_005|0|
9|BBBBB_901|0|
10|CCCCC_001|0|
10|CCCCC_002|0|
10|CCCCC_003|0|
10|CCCCC_004|0|

예상되는 결과:

8|AAAAA|0|AAAAA
9|BBBBB|0|BBBBB
10|CCCCC|0

어떤 아이디어가 있나요? 감사해요

다음을 수행했지만 데이터 내용이 $3이면 결과가 여전히 두 배로 표시됩니다.

cat abc.csv | awk 'BEGIN{FS="|";OFS="|"}
                   {print $1,substr($2,1,5),$3,substr($4,1,5)}' |
  sort -t "|" -k 2 | uniq > abc_final.csv

답변1

GNU 를 가정하면 sort다음과 같이 할 수 있습니다:

< abc.csv awk -F '|' -v OFS='|' '
  {print $1, substr($2, 1, 5), $3, substr($4, 1, 5)}' |
  sort -t '|' -k 2,2 -k4,4r | sort -t '|' -muk2,2

즉, sort -mu행의 일부를 기준으로 " uniq할 수 있는 곳" 대신 사용하십시오.uniq

관련 정보