了解将列值转换为行的 awk 命令

了解将列值转换为行的 awk 命令

此命令将列值转换为行。命令:

awk -s1=" " '{S=S?S OFS s1 $0 s1:s1 $0 s1} END{print S}' OFS=,  Input_file

例子:

1
2
3

转换为:

1, 2, 3

谁能帮我理解这个命令吗?

答案1

您需要知道该语法:

var = bool ? true_action : false_action

这就是所谓的条件表达式

它和

if (bool) { var = true_action } else { var = false_action }

所以这:

 S=S?S OFS s1 $0 s1:s1 $0 s1

与此相同:

if (S) { S=S OFS s1 $0 s1 } else { S = s1 $0 s1 }
  • if (S)如果已分配,则为 true S,因此仅在第一次调用命令时为 false。
  • var1 var2 var3只是将字符串与s1空格、OFS存在,以及S之前分配的任何内容连接起来。
  • END{print S}S将在最后一行之后打印。

答案2

尝试使用下面的 sed 和 perl 命令

perl -pne "s/\n/,/g" filename| sed "s/,$//g"

输出

1,2,3

相关内容