如果字符串为空,我正在尝试使用awk
打印特定文本。它适用于以下情况
noob@noob:~$ echo "" | awk '{if ($0=="") print "not playing"}'
not playing
但是当我尝试在下面的情况下采取类似的方法时,它不起作用
noob@noob:~$ mpc current | awk '{if ($0=="") print "not playing"}'
noob@noob:~$
我相信如果没有播放歌曲,mpc current
的输出是一个空字符串。
noob@noob:~$ mpc current
noob@noob:~$ #empty string
那么,我对empty string
的假设是错误的吗?
答案 0 :(得分:7)
显然它什么都没打印,甚至没有换行。试试这个。
mpc current | awk '{ print } END { if (!NR) print "not playing" }'
这会打印任何输出。如果您不想这样,请取出{ print }
。
awk依次处理每一行,然后在EOF执行任何END块。如果没有输入行,则在开始时将有一个EOF权限,变量NR
将为零,因此END块将打印占位符文本。 (我最初有一个专用的变量,但是在Bob Vale的答案中使用的内置行号变量NR
显然更优雅。对于awk
读取的每个输入行,它会递增。)
答案 1 :(得分:3)
尝试
mpc current | awk 'END { if (NR==0) print "not playing"}'
答案 2 :(得分:3)
这真的是awk
的工作吗?在我看来就像行计数的简单问题:
mpc current | if [[ $(wc -L) -eq 0 ]]; then echo "not playing"; fi
以上代码按mpc current
计算最长行输出的长度,如果是not playing
,则打印“0
”。
以下是它的表现:
$ echo "" | if [[ $(wc -L) -eq 0 ]]; then echo "not playing"; fi
not playing
$
$ echo -n "" | if [[ $(wc -L) -eq 0 ]]; then echo "not playing"; fi
not playing
$
$ echo "foo" | if [[ $(wc -L) -eq 0 ]]; then echo "not playing"; fi
$
$ echo -n "foo" | if [[ $(wc -L) -eq 0 ]]; then echo "not playing"; fi
$
或强>
正如William Pursell在评论中所说,你也可以这样做:
mpc current | grep -q . || echo "not playing"
这也不需要bash
。