파일의 정확한 문자열 수를 나열합니다.

파일의 정확한 문자열 수를 나열합니다.
  11111  1  11  1111111    1 1  1  1 1 1 1  111 1  1 1  1  11 11111111   1    11 1 11 11  1 11111   1 1 

그림과 같은 파일이 있지만 크기가 더 큽니다. 내 목표는 111, 1, 11, 1111 등의 수를 출력하는 것입니다. 파일에 다 들어있습니다. 나는 다음과 같은 일에 대해 이야기하는 게시물을 많이 봅니다.

grep "\^word\" text_file
grep "\bword\b" text_file
grep -Fx "word" text_file
and so on...

이들 모두는 아무것도 출력하지 않거나 전체 파일을 출력합니다. 특정 번호만 나열하려면 어떻게 해야 하나요?

답변1

tr, sortuniq:을 사용하십시오 .

$ tr -s ' ' '\n' <file | sort | uniq -c
   1
  17 1
   5 11
   1 111
   2 11111
   1 1111111
   1 11111111

이는 빈 줄(위 출력의 첫 번째 줄) 수도 제공하지만 다음을 사용하면 이를 방지할 수 있습니다 sed.

$ tr -s ' ' '\n' <file | sed '/^$/d' | sort | uniq -c
  17 1
   5 11
   1 111
   2 11111
   1 1111111
   1 11111111

파이프는 모든 공백을 줄 바꿈으로 변경하고 결과 줄을 정렬하며 각 줄의 발생 횟수를 계산합니다.

답변2

이 문제에서는 grep을 사용하지 않고 awk를 사용합니다.

$ a="11111  1  11  1111111    1 1  1  1 1 1 1  111 1  1 1  1  11 11111111   1    11 1 11 11  1 11111   1 1"

$ awk '{for (i=1;i<=NF;i++) ++seen[$i]}END{for (k in seen) print k,"found:"seen[k]}' <<<"$a"
1 found:17
11 found:5
111 found:1
11111 found:2
1111111 found:1
11111111 found:1

이 한 줄짜리 데모는 전체 파일에 적용됩니다( <<<"$a"로 대체 yourfile).

관련 정보