패턴이 한 번만 나타나는 파일에서 줄을 제거합니다.

패턴이 한 번만 나타나는 파일에서 줄을 제거합니다.

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=""}'

관련 정보