如何串联两行上指定的标识符?
发布于 2021-01-29 16:43:41
输入 由两行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
附言:我将接受最简单,最优雅的解决方案。
关注者
0
被浏览
46
1 个回答
-
假设输入在名为的文件中
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}
对于第一行,将所有列标题保存在array中
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