如何连接两行上指定的标识符?

2024-10-01 00:35:11 发布

您现在位置:Python中文网/ 问答频道 /正文

输入其中标识符由两行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

我会接受最简单最优雅的解决方案。


Tags: l1目标on标识符解决方案rowsuniqueidentifier
3条回答

假设输入位于名为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

如果您计划使用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

相关问题 更多 >