Linux에서 파일에서 가장 일반적으로 나타나는 줄을 가져옵니다.


11

한 줄에 여러 단어가있는 텍스트 파일이 있습니다.
파일에서 가장 자주 나타나는 12 줄을 찾아서 표시하려면 어떻게해야합니까?
스크립팅 명령에 익숙하지 않습니다.

명령을 사용하고 명령에 대한 지식을 넓힐 수 있도록 명령과 설명을 얻을 수 있다면 좋을 것입니다!


답변:


21

기본 제공 명령을 사용하여이 작업을 쉽게 수행 할 수 있습니다.

  • 파일 내용을 공급하십시오 sort. 다음 단계에는 이것이 필요합니다.
  • 으로 이동합니다 uniq -c. 각 줄의 고유 한 발생 횟수를 계산합니다. 비슷한 줄이 인접하지 않으면 이전에 정렬하지 않고 작동하지 않았을 것입니다.
  • 그런 다음 다른로 공급 sort하여 역순으로 정렬하고 ( r) 출력 의 숫자 ( n) 해석을 기반으로합니다 uniq. 그렇지 않으면 숫자 옵션이 필요합니다. 숫자 앞의 공백은 잘못된 결과로 이어질 수 있습니다 ( GNU sort의 도움말 참조).
  • 마지막으로로 첫 12 행만 표시하십시오 head.

명령은 다음과 같습니다.

sort test.txt | uniq -c | sort -rn | head -n 12

여기의 출력에는 실제 발생 횟수가 포함됩니다.

원시 행 목록 만 가져 오려면 출력을 sed다음으로 파이프하십시오 .

sort test.txt | uniq -c | sort -rn | head -n 12 | sed -E 's/^ *[0-9]+ //g'

예:

I'm not there very often
I'm not there very often
Look at me!
Look at me!
Look at me!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!

첫 번째 명령의 출력이지만 다음 중에서 2 만 선택합니다 head.

6 Hello there!
3 Look at me!

두 번째 명령의 출력 :

Hello there!
Look at me!

1
를 사용하기 전에 정렬해야합니다 uniq.
cYrus

! @slhck : 감사 한 질문에 다음 sort -rn역순 종류는 다음에 의해 생성 된 각각의 라인 수를 필드 정렬로 사용 uniq -c? 내가 좋아하는 뭔가를 생각 k1하거나 같은 것을 사용할 것

@Jim 정확합니다. rn의해 생성 된 수를 반대로하여 숫자로 정렬합니다 uniq. 정확히 무엇을 의미 k1합니까?
slhck

@slhck : 나는이 명령들을 사용하여 알아 내려고 노력 했고 정렬 할 필드를 선택하기 위해 무언가를 man사용하는 구문을 -k사용해야 한다는 것을 이해했다
Jim

@ cYrus : 사전에 정렬이 필요한 경우는 무엇입니까?
Jim

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.