如何计算单词数并打印与给定模式完全匹配的行?

如何计算单词数并打印与给定模式完全匹配的行?

我想计算单词数并打印与以下模式完全匹配的匹配模式行:

abc-ERROR:

输入文件包含:

# abc-ERROR: xyxxkkfgfr
# def-Error: aaaaaa
# abc-ERROR.cpp

输出应该是:

 1   (count)
 # abc-ERROR: xyxxkkfgfr   (line)

答案1

您可以使用grep来获取行数和grep -c行数。如果你不喜欢运行grep两次,你可以使用teeand进程替换(以下是bash语法):

grep abc-ERROR: input.txt | tee >( wc -l )

答案2

这怎么样:

$ cat file
# abc-ERROR: xyxxkkfgfr
# abc-ERROR: xyxxkkfgfr
# abc-ERROR: xyxxkkfgfr
# def-Error: aaaaaa
# abc-ERROR.cp
# abc-ERROR: asdgsdgaaf
# abc-ERROR: asdgsdgaaf
# abc-ERROR: tttttttttq

$ awk '/abc-ERROR: /{a[$0]++}END{for(k in a) printf "%d\t(count)\n%s\t(line)\n",a[k],k}' file
1   (count)
# abc-ERROR: tttttttttq (line)
2   (count)
# abc-ERROR: asdgsdgaaf (line)
3   (count)
# abc-ERROR: xyxxkkfgfr (line)

答案3

我建议采用两种方法来解决这个问题。

1)在 bashrc / bash_profile 中放置一个函数并创建一个别名来调用该函数(这将在全局范围内使用该函数)

2)创建一个shell脚本文件,也可以创建该文件的别名。

#!/bin/bash
function matchString(){
REGEX="$1"
FILE="$2"
RESULTS=$(grep -n "$REGEX" $FILE | awk -F ":" '{print $2 "\tLine: " $1}')
COUNT=$(echo $RESULTS | wc -l)
echo "Count: $COUNT"
echo $RESULTS
}
matchString $1 $2

根据您的文本文件调用此文件(即 bash matchString.sh "abc-ERROR:" test.txt)将输出如下:

数量:1

abc-错误行:1

--此函数将第一个参数作为正则表达式模式(因此可以在任何类似的场景中重复使用)并在第二个参数调用的文件中搜索该模式。

输出的第一行是所有匹配行的总数,后面的每一行是匹配项,后跟一个制表符,表示该匹配项的行号。

相关内容