尝试打印带有条件的行,例如 -
输入示例
Hello:world
Hello:worlds:
Hello:world:example
试图 -
awk -F":" print $1 " + " $2 && if($3 != "") { " + " $3 }
所以预期的输出是
Hello + world
Hello + worlds
Hello + world + example
答案1
如果你只需要关心一个空的最后的字段,那么使用sed
会更短:
$ sed 's/:$//; s/:/ + /g' file
Hello + world
Hello + worlds
Hello + world + example
您尝试的awk
命令可以这样挽救:
$ awk -F":" '{ print $1 " + " $2 ($3 != "" ? " + " $3 : "") }' file
Hello + world
Hello + worlds
Hello + world + example
或者,通过使用OFS
(输出字段分隔符):
$ awk -F":" -v OFS=' + ' '{ print $1, $2 ($3 != "" ? OFS $3 : "") }' file
Hello + world
Hello + worlds
Hello + world + example
另外摆脱阴性测试:
$ awk -F":" -v OFS=' + ' '{ print $1, $2 ($3 == "" ? "" : OFS $3 ) }' file
Hello + world
Hello + worlds
Hello + world + example
答案2
如果最后一列为空,则从输出中删除最后一列。$1=$1
强制 awk 使用输出字段分隔符 (OFS) 重新创建行。
awk '$NF=="" {NF--} {$1=$1}1' FS=':' OFS=' + ' file
输出:
你好+世界 你好+世界 你好+世界+例子