원본 데이터(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