2014-07-26 2 views
2

셸 스크립트를 사용하여 파일의 한 열과 단어 자체에서 고유 단어 수를 확인하려고했습니다. 여기 제가하고있는 일이 있습니다. (: gnc.txt, 도시 이름 뒤에 새로운 라인 파일 이름) :셸에서 파일의 한 열에있는 고유 단어 수

Male,Tyrus,Seattle 
Male,Sam,Seattle 
Male,Meha,Seattle 
Male,John,Seattle 
Male,Sam,Beijing 
Male,Meha,Paris 
Male,Meha,Berlin 

내가 쉘 명령 아래 사용하여 4 고유 한 이름의 수를 발견 첫 단계로를 입력 파일이 포함되어 있습니다. 나는 고유 한 이름의 목록을 얻으려면 다음 단계로

awk -F\, '{ if(!a[$2]) cnt++;a[$2]++;next}END{ print cnt }' gnc.txt 

: 즉 타이 러스, 샘, Meha 존

누군가가 위의 명령을 변경하는 방법에 대한이 나를 도와 드릴까요?

+0

을 스크립트에서'next'하는 것은 불필요하다. 단순히 이름을 원한다면,'END {print cnt; (name in a) 인쇄 이름}'. 이름과 횟수가 필요하면 다음을 사용하십시오 :'END {print cnt; (name in a) 인쇄 이름, cnt [name]}'. –

답변

3

이 AWK를 사용 :

awk -F, '{c[$2]++} END{for (i in c) print i, c[i]}' file 
Tyrus 1 
Sam 2 
John 1 
Meha 3 
+0

감사 Anubhava. 빨리되었습니다. 이걸 설명해 주시겠습니까? '{c [$ 2] ++} END. 나는 제대로 이해하지 못했다. – user3624000

+0

'c [$ 2] ++'는 존재하지 않으면 key를'$ 2'로 가지는 배열을 먼저 선언하고 그 값을 1 씩 증가시킵니다. – anubhava

+0

또한 답을 얻은 경우 내 대답의 왼쪽 상단에있는 눈금 표시를 클릭하여 대답을 표시하는 것이 좋습니다. – anubhava

2

당신은이를 사용할 수 있습니다

cut -d',' -f2 file | sort | uniq -c 
     1 John 
     3 Meha 
     2 Sam 
     1 Tyrus