如果没有可用的参数,则获取gawk输出0

时间:2014-12-31 19:06:17

标签: bash scripting gawk

如果$ 5

中没有参数,我很难让这段代码输出0
ls -AFl | sed "1 d" | grep [^/]$ | gawk '{ if ($5 =="") sum = 0; else sum += $5 } END { print sum }'

当我在没有任何文件的目录中运行此行时,它会输出换行符,而不是0。 我不明白为什么?如何在目录中没有文件的情况下输出0,任何帮助都将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:1)

您可以将awk命令更改为:

gawk 'BEGIN { sum = 0 } $5 { sum += $5 } END { print sum }'

即。仅在sum阻止时将0初始化为BEGIN并仅在sum非空时汇总$5

答案 1 :(得分:0)

这是实现目标的另一种方式:

stat * 2&>/dev/null | awk '/Size/ && !/directory/ { sum += $2 } END { print (sum ? sum : 0) }'

这使用awk来解析stat的输出。 shell将*扩展为当前目录中所有内容的名称。如果目录为空,stat会产生错误,该错误会发送到/dev/null

awk脚本为包含" Size"的行添加第二列的值。但不是"目录",因此包含文件和符号链接。如果您只想统计文件,可以将!/directory/更改为/regular file/

三元运算符? :表示sum是"是",打印sum,否则打印0。如果目录为空,则未定义sum,因此将打印0

正如评论中所提到的,将sum强制转换为数字的更简洁方法是使用print sum+0,或者使用一元+运算符print +sum。在这种情况下,要么使用完全正常,尽管许多人建议在更复杂的情况下使用+sum