我的输入如下所示:
A|B|C
1|2|3
4|5|6
使用awk,我正在尝试获取:
A|1
B|2
C|3
A|4
B|5
C|6
我的代码:
gawk '
BEGIN{FS=OFS="|"}
NR==1{
for(i=1; i<=NF; i++){
x_i=$i
}
}
NR>1{
for(i=1; i<=NF; i++){
print x_i FS $i
}
}' input
但是,NR==1
即使我在NR>1
bock中使用相同的循环,它也只保留该块的最后一次迭代:
C|1
C|2
C|3
C|4
C|5
C|6
有什么把戏吗?
感谢何塞,我需要改变x_i
的x[i]
。
如果使用相同的输入该怎么办,我将需要输出:
A;B;C|1|2|3
A;B;C|4|5|6
你可以试试,
awk 'BEGIN{FS=OFS="|"}
NR==1{for(i=1; i<=NF; ++i) d[i]=$i; next}
{for(i=1; i<=NF; ++i) print d[i], $i}
' input
你得到
A|1
B|2
C|3
A|4
B|5
C|6
重要的提示
您的逻辑是正确的,仅x[i]
代替x_i
gawk '
BEGIN{FS=OFS="|"}
NR==1{
for(i=1; i<=NF; i++){
x[i]=$i
}
}
NR>1{
for(i=1; i<=NF; i++){
print x[i] FS $i
}
}' input
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句