Unix 列出文件中多次出现的所有字符串
我有一个大约70GB的非常大的文件,我想列出在整个文件中多次出现的所有字符串 当我指定在文件中搜索哪个字符串时,我可以列出所有匹配项,但我想列出所有出现多次的字符串 例如,假设我的文件如下所示:Unix 列出文件中多次出现的所有字符串,unix,grep,Unix,Grep,我有一个大约70GB的非常大的文件,我想列出在整个文件中多次出现的所有字符串 当我指定在文件中搜索哪个字符串时,我可以列出所有匹配项,但我想列出所有出现多次的字符串 例如,假设我的文件如下所示: +------+------------------------------------------------------------------+----------------------------------+--+ | HHID | V
+------+------------------------------------------------------------------+----------------------------------+--+
| HHID | VAL_CD64 | VAL_CD32 | |
+------+------------------------------------------------------------------+----------------------------------+--+
| 203 | 8c5bfd9b6755ffcdb85dc52a701120e0876640b69b2df0a314dc9e7c2f8f58a5 | 373aeda34c0b4ab91a02ecf55af58e15 | |
| 7AB | f6c581becbac4ec1291dc4b9ce566334b1cb2c85e234e489e7fd5e1393bd8751 | 2c4f97a04f02db5a36a85f48dab39b5b | |
| 7AB | abad845107a699f5f99575f8ed43e0440d87a8fc7229c1a1db67793561f0f1c3 | 2111293e946703652070968b224875c9 | |
| 348 | 25c7cf022e6651394fa5876814a05b8e593d8c7f29846117b8718c3dd951e496 | 5c80a555fcda02d028fc60afa29c4a40 | |
| 348 | 67d9c0a4bb98900809bcfab1f50bef72b30886a7b48ff0e9eccf951ef06542f9 | 6c10cd11b805fa57d2ca36df91654576 | |
| 348 | 05f1e412e7765c4b54a9acfd70741af545564f6fdfe48b073bfd3114640f5e37 | 6040b29107adf1a41c4f5964e0ff6dcb | |
| 4D3 | 3e8da3d63c51434bcd368d6829c7cee490170afc32b5137be8e93e7d02315636 | 71a91c4768bd314f3c9dc74e9c7937e8 | |
+------+------------------------------------------------------------------+----------------------------------+--+
我只想列出HHID不止一次的记录,即7AB和348
你知道我该怎么做吗?请大家帮忙:
awk-F'[|]+''
$2~/^[:alnum:]+$/{count[$2]+}
结束{
对于hhid计数{
如果计数[hhid]>=2{
打印hhid
}
}
}
"档案"
-F'[|]+'设置字段分隔符。
$2~/^[[:alnum:]+$/过滤掉标题和水平行。
count[$2]++将值增加到$2,即我们正在计算的字符串。第一次出现时,将值初始化为1。第二次出现时,它将其增加到2,依此类推。
在处理完所有行后运行END。
for hhid in count对count中的字符串进行迭代。
如果count[hhid]>=2跳过任何定义“字符串”的内容?线空格分隔的单词?用一个例子更新了问题。查看和,加上一些或awk。或者只是用Perl、Python或其他您熟悉的脚本语言编写一个程序。再次道歉。HH_ID不一定只包含数字,也可以包含比3更多的字符。我已经编辑了答案。匹配实际上只是过滤掉标题和水平线。如果文件格式更简单,例如制表符分隔,那么awk脚本可能更简单。谢谢。您能解释一下awk命令中的每个语句都在做什么吗。这将非常有助于我增加我的知识。而且,文件是管道分隔的。更简单的命令是什么?类似于awk-F'|'{count[$1]+}END{…}。