如何在 Unix 中使用 awk 从文本文件打印奇数字段?

如何在 Unix 中使用 awk 从文本文件打印奇数字段?

我无法理解给出的答案,尽管这肯定有助于满足我的要求。

awk -F\| '{s="";for (i=1;i<=NF;i+=2) {s=s?s FS $i:$i} print s}' file

这是{s=s?s FS $i:$i} print s}做什么的?它如何打印所需的输出?我知道这是一个正在使用的三元运算符。但它如何计算表达式并打印输出呢?

答案1

将其视为 if-then-else

 {s=s?s FS $i:$i} 

评估为

 { if ( s != "" ) s=s FS $i ; ## i=3,5,7,...
   else s=$i ; } ## i=1

这看起来像是一个晦涩的代码。

awk -F\| '{s="";for (i=1;i<=NF;i+=2) {s=s?s FS $i:$i} print s}' file

相当于(最容易理解)

awk -F\| '{s=$1;for (i=3;i<=NF;i+=2) {s=s FS $i} print s}' file

相关内容