【问题标题】:print search term with line count打印带有行数的搜索词
【发布时间】:2012-03-03 14:17:59
【问题描述】:

你好 bash 初学者问题。我想查看多个文件,找到包含搜索词的行,计算此列表中唯一行的数量,然后打印到 tex 文件中:

  1. 输入文件名
  2. 使用的搜索词
  3. 唯一行数

因此,使用搜索词“Stop_gained”的文件“Firstpredictoroutput.txt”的示例输出行将是:

Firstpredictoroutput.txt Stop_gained 10 

我可以使用以下方法获取单个文件的唯一计数:

grep 'Search_term' inputfile.txt | uniq -c | wc -l | >>output.txt 

但我对使用 bash 在管道中实现循环还不够了解。 我所有的输入文件都以 *predictoroutput.txt 结尾

非常感谢任何帮助。

提前致谢,

鲁巴尔

【问题讨论】:

    标签: linux grep pipeline uniq wc


    【解决方案1】:

    您可以编写一个名为fun 的函数,并使用两个参数调用funfilenamepattern

    $ fun() { echo "$1 $2 `grep -c $2 $1`"; }
    $ fun input.txt Stop_gained
    input.txt Stop_gained 2
    

    【讨论】:

    • 感谢您运行良好。将它放在一个循环中会很棒,以避免写出每个输入文件和搜索词。但如果我写出所有可能组合的列表,它现在是可行的。
    【解决方案2】:

    你可以使用 find :

    find . -type f -exec sh -c "grep 'Search_term' {} | uniq -c | wc -l >> output.txt" \;
    

    虽然您可能会遇到奇怪的文件名问题。您可以添加更多选项来查找,例如仅处理“.txt”文件:

    find . -type f -name "*.txt" -exec sh -c "grep 'Search_term' {} | uniq -c | wc -l >> output.txt" \;
    

    【讨论】:

    • 感谢,它会生成一个输出文件,但目前它是空的。我已检查文件中是否存在搜索词。所以不知道为什么它不起作用。有任何故障排除提示吗?
    • 抱歉 wc 和重定向之间没有管道。修好了。
    • 谢谢,现在可以了,但只输出 wc -l 计数而不是文件名和搜索词。
    【解决方案3】:
    q="search for this"
    for f in *.txt; do echo "$f $q $(grep $q $f | uniq | wc -l)"; done > out.txt
    

    【讨论】:

    • 太棒了。您可以接受并投票赞成对您实际有效的答案。
    猜你喜欢
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多