2024-10-01 00:35:11 发布
网友
输入其中标识符由两行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
我会接受最简单最优雅的解决方案。
假设输入位于名为file的文件中:
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中的所有列标题。然后,跳过其余的命令并跳到下一行。
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
如果您计划使用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]]
#!/usr/bin/awk -f NR == 1 { split($0, a) next } NR == 2 { for (b in a) printf "%-20s", a[b] $b print "" next } 1
假设输入位于名为
file
的文件中:工作原理
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对按原样打印行的神秘速记。这是在秒后对所有行执行的。制表符分隔列,可能缺少列
如果列以制表符分隔:
如果您计划使用python,可以按以下方式使用zip:
输出:
相关问题 更多 >
编程相关推荐