列出文件中精确字符串的数量

列出文件中精确字符串的数量
  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 

我有一个如图所示的文件,但规模更大。我的目标是输出111s、1s、11s、1111s等的数量。都在文件里。我看到很多帖子都在谈论做:

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

相关内容