CSV 파일이 있습니다. 첫 번째 필드의 식별자에 따라 정렬됩니다. 첫 번째 필드의 식별자는 필드의 1줄 또는 2줄에 나타날 수 있습니다. 식별자가 한 번만 나타나는 파일의 모든 줄을 제거하고 싶습니다.
예를 들어 파일에는 다음이 포함됩니다.
Id1,x11,x12...
Id2,x21,x22...
Id2,x23,x24...
이 경우에는 Id1이 한 번만 나타나기 때문에 첫 번째 행을 삭제하고 싶습니다.
답변1
시도 해봐:
awk 'BEGIN{FS=",";}{if (!ids[$1]) {ids[$1]=1;lines[$1]=$0;} else {if (ids[$1]==1) {print lines[$1]; print; ids[$1]++;} else {print;}}}'
ID가 처음 발견되면 다음 위치에 저장됩니다.ID연관 배열, 전체 행이 저장됩니다.철사연관 배열이지만 인쇄되지 않습니다.
id가 두 번 이상 발견되면 저장된 행이 인쇄되고 각 추가 행도 인쇄됩니다.
시험을 치르다:
$ cat data.csv
Id1,x11,x12...
Id2,x21,x22...
Id2,x23,x24...
$ awk 'BEGIN{FS=",";}{if (!ids[$1]) {ids[$1]=1;lines[$1]=$0;} else {if (ids[$1]==1) {print lines[$1]; print; ids[$1]++;} else {print;}}}' data.csv
Id2,x21,x22...
Id2,x23,x24...
답변2
제이의 대답awk
순서가 지정되지 않은 경우에는 일반적인 솔루션 이지만 순서가 지정된 경우에는 더 간단할 수 있습니다.
awk -F, '$1!=id {id=$1;pr=$0 ORS;next} {print pr $0;pr=""}'