我想看看有多少行一个特定的字符串存在。而使用grep -c ^$string $file_name
我没有问题,但我需要在我的项目中使用"awk"命令。我尝试使用awk '/$string/ {print}' $file_name
,但返回0而不是1。请帮帮我!
您需要在您的尝试中修复2件事,第一-如何通过使用-v
选项将shell变量传递到awk
程序(其中string
是您的shell变量)。使用grep
的-c
选项来获取每行字符串的计数。为了应用第二个选项,使用awk
的gsub
函数全局替换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