使用awk查找文件中的空行

使用awk查找文件中的空行,awk,gawk,Awk,Gawk,对于这样一个基本的问题,我深表歉意,但我正试图用awk计算文本文件中的空行数。这不是家庭作业。视窗10。Gawk 4.1.3 BEGIN { x=0 } /^$/ { x=x+1 } END { print "I found " x " blank lines." } 输出总是:我发现0个空行 谢谢。该命令应该可以工作,但您可以跳过x的初始化awk将自动为您执行此操作。您可以使用NF变量进行该检查,如果该变量为0,其计算结果为false,则该行为空。此外,我建议使用printf: !

对于这样一个基本的问题,我深表歉意,但我正试图用awk计算文本文件中的空行数。这不是家庭作业。视窗10。Gawk 4.1.3

BEGIN { x=0 } 
/^$/  { x=x+1 } 
END   { print "I found " x " blank lines." }
输出总是:我发现0个空行


谢谢。

该命令应该可以工作,但您可以跳过
x
的初始化
awk
将自动为您执行此操作。您可以使用
NF
变量进行该检查,如果该变量为
0
,其计算结果为
false
,则该行为空。此外,我建议使用
printf

!NF  {x++}
END  {printf "I found %d blank lines\n", x}
顺便说一句,您只需使用
grep

grep -ch '^$' file
-c
仅输出找到的出现次数,
-h
禁止输出文件名

使用命令替换将输出插入到
echo
语句中:

echo "I found $(grep -ch '^$' file) blank lines"

该命令应该可以工作,但您可以跳过
x
的初始化
awk
将自动为您执行此操作。您可以使用
NF
变量进行该检查,如果该变量为
0
,其计算结果为
false
,则该行为空。此外,我建议使用
printf

!NF  {x++}
END  {printf "I found %d blank lines\n", x}
顺便说一句,您只需使用
grep

grep -ch '^$' file
-c
仅输出找到的出现次数,
-h
禁止输出文件名

使用命令替换将输出插入到
echo
语句中:

echo "I found $(grep -ch '^$' file) blank lines"

除了您已经得到的好的awk解决方案之外,sed解决方案将是

sed -n '/^$/p' file |wc -l

此处
-n
抑制正常输出,
p
打印行为空的行(
^$
wc-l
计算这样打印的行总数。

除了您已经得到的漂亮的awk解决方案之外,sed解决方案将是

sed -n '/^$/p' file |wc -l

此处
-n
抑制正常输出,
p
打印行为空的行(
^$
wc-l
计算这样打印的行总数。

您的解决方案对我有效。您是否还考虑空白仅行空白?GAWK’NF==0 {x++}结束{打印“我找到”x“空白行”}文件,因为它根据EUS77工作,它可能只是一个行终止符问题。也许可以先尝试通过
dos2unix
进行管道传输。
grep-cvP'\S'文件
awk/^[:space:]*$/{x++}
应该可以工作。您是否将该脚本保存在正在使用
awk-f脚本输入执行的文件中
或者您正在尝试使用
awk'BEGIN{…}输入
从命令行调用它?如果是前者,很好,如果是后者,就改为前者@检查如果您删除了OPs BEGIN部分(您应该删除该部分),那么您需要使用printf
%d
或使用
x+0
来避免空文件的输出为空而不是零。您的解决方案对我很有效。您是否还考虑空白仅行空白?GAWK’NF==0 {x++}结束{打印“我找到”x“空白行”}文件,因为它根据EUS77工作,它可能只是一个行终止符问题。也许可以先尝试通过
dos2unix
进行管道传输。
grep-cvP'\S'文件
awk/^[:space:]*$/{x++}
应该可以工作。您是否将该脚本保存在正在使用
awk-f脚本输入执行的文件中
或者您正在尝试使用
awk'BEGIN{…}输入
从命令行调用它?如果是前者,很好,如果是后者,就改为前者@检查如果您删除了OPs BEGIN部分(您应该删除),那么您需要使用printf
%d
或使用
x+0
来避免空文件的输出为空而不是零。