此命令将列值转换为行。命令:
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)
如果已分配,则为 trueS
,因此仅在第一次调用命令时为 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