![첫 번째 쉼표 앞의 일치 항목을 기준으로 중복 행 제거](https://linux55.com/image/122534/%EC%B2%AB%20%EB%B2%88%EC%A7%B8%20%EC%89%BC%ED%91%9C%20%EC%95%9E%EC%9D%98%20%EC%9D%BC%EC%B9%98%20%ED%95%AD%EB%AA%A9%EC%9D%84%20%EA%B8%B0%EC%A4%80%EC%9C%BC%EB%A1%9C%20%EC%A4%91%EB%B3%B5%20%ED%96%89%20%EC%A0%9C%EA%B1%B0.png)
Linux Centos 7 서버에 큰 텍스트가 있고 첫 번째 쉼표 앞에 일치하는 줄을 제거하고 싶습니다.
입력하다:
112112112,00,00,00
110110,01,01,02
112112112,11,11,888
110110,99,88,8
410410,22,22,22
산출:
410410,22,22,22
답변1
awk
다음은 몇 가지 이중 채널 솔루션 입니다 . 첫 번째 패스에서는 필드 1의 빈도를 배열에 저장합니다 x
. x
필드 1의 빈도가 1로 보고 되면 두 번째 패스에서는 한 줄을 인쇄합니다.
awk -F, 'first_pass{x[$1]++; next}; x[$1] == 1' first_pass=1 file first_pass=0 file
awk -F, 'BEGIN{while ((getline<ARGV[1]) > 0)x[$1]++}; x[$1] == 1' file
답변2
짧은GNUdatamash
+sed
콤비네이션:
datamash -sft',' -g1 count 1 <file | sed -n 's/,1$//p'
위 파이프라인의 첫 번째 프로세스는 첫 번째 필드 값에 대해 각 그룹의 항목 수를 그룹화하여 계산 -g1
하고 결과 개수를 마지막 필드에 추가합니다.