2014-11-11 2 views
1

첫 번째 필드를 기준으로 고유 한 행을 인쇄하고 해당 행의 첫 번째 발생을 유지하고 다른 중복 발생을 제거 하시겠습니까?awk : 열 필드를 기반으로 고유 한 행을 인쇄하십시오.

Input.csv

10,15-10-2014,abc 
20,12-10-2014,bcd 
10,09-10-2014,def 
40,06-10-2014,ghi 
10,15-10-2014,abc 

원하는 출력 :

10,15-10-2014,abc 
20,12-10-2014,bcd 
40,06-10-2014,ghi 

은 ... 명령을 아래와에서 완성 제안을 찾고

awk 'BEGIN { FS = OFS = "," } { !seen[$1]++ } END { for (i in seen) print $0}' Input.csv 

봤어

답변

13

당신은 조건 부분 대신 스크립트의 동작 부분에 "seen"가 있는지 테스트하십시오. 로 변경 :

awk -F, '!seen[$1]++' Input.csv 

예, 전체 스크립트입니다 :

$ cat Input.csv 
10,15-10-2014,abc 
20,12-10-2014,bcd 
10,09-10-2014,def 
40,06-10-2014,ghi 
10,15-10-2014,abc 
$ 
$ awk -F, '!seen[$1]++' Input.csv 
10,15-10-2014,abc 
20,12-10-2014,bcd 
40,06-10-2014,ghi 
+1

덕분에 많은 에드 모튼! – VNA

+1

@AVN -이 답변을 선택하면 "대답"됩니다. –

+1

@MichaelChaney 질문을 답변으로 표시하는 것이 항상 바람직한 정책이지만, 나는 항상 당신이 한 시간 정도 기다려야한다고 제안한다. 그것은 더 나은 대답을 가지고 있을지도 모른다. 그러나 나는 여기 그것을 의심한다. – Jotne

0

이 당신이 원하는 무엇을 제공해야합니다

awk -F, '{ if (!($1 in a)) a[$1] = $0; } END '{ for (i in a) print a[i]}' input.csv 
+1

요청에 따라 고유 한 출력을 생성 할 것이지만'in' 연산자로 인해 출력 행의 순서를 뒤섞을 것이고 그것은 관용적 인 awk 접근법보다 훨씬 더 많은 코딩이다. 대답). –

관련 문제