使用awk显示模式存在多少行



我想看看有多少行一个特定的字符串存在。而使用grep -c ^$string $file_name我没有问题,但我需要在我的项目中使用"awk"命令。我尝试使用awk '/$string/ {print}' $file_name,但返回0而不是1。请帮帮我!

您需要在您的尝试中修复2件事,第一-如何通过使用-v选项将shell变量传递到awk程序(其中string是您的shell变量)。使用grep-c选项来获取每行字符串的计数。为了应用第二个选项,使用awkgsub函数全局替换str(awk中的字符串shell变量)的所有出现值,并不断将替换值添加到变量计数中,在awk程序的END块中打印count变量的值,该变量将包含整个Input_file中每行字符串的总出现次数。

awk -v str="$string" '{count+=gsub(str,"&")} END{print count}' Input_file

注意:上面的解决方案将计算每行字符串值的每一次出现,以防您需要计算每行字符串的第一个值,然后在上面的程序中从gsub更改为sub

已经指出,可以使用-v选项将变量传递给awk。如果您希望"查看特定字符串作为grep -c存在多少行,另一种选择是使用match.

您可以为每个匹配增加1,并在结束时返回计数,如果没有匹配则返回0。

awk '
match($0, /yourpattern/) {
count++
}
END{print count ? count : 0}' file

你也可以试试:

awk -v s="$string" 'BEGIN { i=0 } { index($0, s) && ++i } END { print i }' file

相关内容

最新更新