计算包含重复模式的行

时间:2016-07-27 21:51:39

标签: unix awk sed filtering

我有一个文件(File.txt),其中包含10行,可能包含某个位置的重复模式(14-17)

fsdf sfkljkl4565
fjjf lmlkfdm1235
fkljfgdfgdfg6583
eretjioijolj6933
ioj ijijsfoi4565
dgodiiopkpok6933
fsj opkjfiej4565
ihfzejijjijf4565
dfsdkfjlfeff1235
dijdijojijdz4565

Desired Output正在计算包​​含模式的行:

 #occurences   pattern 
      5         4565
      2         1235
      1         6583
      2         6933

我试图过滤文件

cat File.txt | cut -c14-17 | sort -n -K1,1-1,3 >> File_Filtered.txt 

我需要你的帮助来添加第一列(#occurences)

2 个答案:

答案 0 :(得分:3)

要计算重复次数,请使用uniq -c。因此,请尝试:

 $ cut -c13-17 File.txt | sort -n | uniq -c | sort -nr
      5 4565
      2 6933
      2 1235
      1 6583

以上是使用Linux和GNU实用程序测试的。 (根据您的示例代码判断,您可能正在使用不同的工具。)

包括标题

以下内容包括标题,并使用column -t确保一切顺利排列:

$ { echo '#occurences pattern'; cut -c13-17 File.txt | sort -n | uniq -c | sort -nr; } | column -t
#occurences  pattern
5            4565
2            6933
2            1235
1            6583

答案 1 :(得分:2)

$ awk '{cnt[substr($0,13)]++} END{for (i in cnt) print cnt[i], i}' file
2 6933
1 6583
5 4565
2 1235