计算grep结果

时间:2018-04-29 18:10:35

标签: bash sh

我是bash的新手,所以我在做一些非常基本的事情时遇到了麻烦。  通过使用各种脚本,我发现以下脚本打印包含"字"

的行
for file in*; do
    cat $file | grep "word"
done

执行以下操作:

for file in*; do
    cat $file | grep "word" | wc -l
done

在每次迭代中都有打印的结果" word"出现在档案中。

  • 如何为所有这些外观和实施计数器实现计数器 结束只是echo柜台?

我使用了一个计数器,但它显示为0。

 let x+=cat $filename | grep "word"

2 个答案:

答案 0 :(得分:5)

您可以将整个循环传递给wc -l

for file in *; do
    cat $file | grep "word"
done | wc -l

这是useless use of cat。怎么样:

for file in *; do
    grep "word" "$file"
done | wc -l

实际上,如果您同时将所有文件名传递给grep,则不需要整个循环。

grep "word" * | wc -l

请注意,如果word在同一行显示多次,则这些解决方案只计算整行一次。如果您想单独计算相同行数,可以使用-o在单独的行上打印每个匹配项:

grep -o "word" * | wc -l

答案 1 :(得分:2)

约翰回答中的问题是要走的路。只是为了满足你的好奇心:

extension NSDictionary {
    func toJSonString() -> String {

        let dict = self
        var jsonString = "";

        do {

            let jsonData = try JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted)
            jsonString = NSString(data: jsonData, encoding: String.Encoding.utf8.rawValue)! as String

        } catch {
            print(error.localizedDescription)
        }

        return jsonString;
    }
}

如果包含sum=0 for f in *; do x="$(grep 'word' "$f" | wc -l)" echo "x: $x" (( sum += x )) done echo "sum: $sum" grep的行不会产生数字,那么您就是SOL。这就是为什么你应该坚持使用其他解决方案,或者对wc,' readcase'等事情进行纯粹的bash实现。或*word*)