输入,其中标识符由两行1-2
指定L1_I L1_I C-14 <---| unique idenfier
WWPTH WWPT WWPTH <---| on two rows
1 2 3
目标:如何连接行?
L1_IWWPTH L1_IWWPT C-14WWPTH <--- unique identifier
1 2 3
P.S。我将接受最简单,最优雅的解决方案。
答案 0 :(得分:2)
假设输入位于名为file
的文件中:
$ awk 'NR==1{for (i=1;i<=NF;i++) a[i]=$i;next} NR==2{for (i=1;i<=NF;i++) printf "%-20s",a[i] $i;print"";next} 1' file
L1_IWWPTH L1_IWWPT C-14WWPTH
1 2 3
NR==1{for (i=1;i<=NF;i++) a[i]=$i;next}
对于第一行,保存数组a
中的所有列标题。然后,跳过其余命令并跳转到下一行。
NR==2{for (i=1;i<=NF;i++) printf "%-20s",a[i] $i;print"";next}
对于第二行,打印所有列标题,将第一行和第二行中的列标题合并在一起。然后,跳过其余命令并跳转到下一行。
1
1
是awk用于打印线条的神秘简写。在秒之后对所有行完成此操作。
如果列以制表符分隔:
awk -F'\t' 'NR==1{for (i=1;i<=NF;i++) a[i]=$i;next} NR==2{for (i=1;i<=NF;i++) printf "%s\t",a[i] $i;print"";next} 1' file
答案 1 :(得分:0)
如果您打算使用python,可以通过以下方式使用zip:
input = [['L1_I', 'L1_I', 'C-14'], ['WWPTH','WWPT','WWPTH'],[1,2,3]]
output = [[i+j for i,j in zip(input[0],input[1])]] + input[2:]
print output
输出:
[['L1_IWWPTH', 'L1_IWWPT', 'C-14WWPTH'], [1, 2, 3]]
答案 2 :(得分:0)
#!/usr/bin/awk -f
NR == 1 {
split($0, a)
next
}
NR == 2 {
for (b in a)
printf "%-20s", a[b] $b
print ""
next
}
1