我的输入如下:
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
任何技巧?
感谢Jose,我需要x_i
更改x[i]
。
如果使用相同的输入,我需要输出:
A;B;C|1|2|3
A;B;C|4|5|6
答案 0 :(得分:1)
$ awk 'BEGIN{FS=OFS="|"} NR==1{split($0,h);next} {for (i=1;i<=NF;i++) print h[i], $i}' file
A|1
B|2
C|3
A|4
B|5
C|6
$ awk 'BEGIN{FS=OFS="|"} NR==1{gsub(/\|/,";");h=$0;next} {print h, $0}' file
A;B;C|1|2|3
A;B;C|4|5|6
阅读有效的Awk编程,第4版,作者Arnold Robbins。
答案 1 :(得分:0)
你可以尝试,
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
答案 2 :(得分:0)
使用for
和$ awk 'NR==1 { split($0,a,"|") }
NR>1 { n=split($0,b,"|");
for(i=1;i<=n;i++)
print a[i] "|" b[i] }' file
A|1
B|2
C|3
A|4
B|5
C|6
:
fixed_toFixed = (value, prec) => Math.abs(value) < Math.pow(10, -prec) ? (0).toFixed(prec) : value.toFixed(prec);