awk打印条件

awk打印条件

尝试打印带有条件的行,例如 -

输入示例

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

输出:

你好+世界
你好+世界
你好+世界+例子

看:8 个强大的 awk 内置变量 – FS、OFS、RS、ORS、NR、NF、FILENAME、FNR

相关内容