如何串联两行上指定的标识符?

发布于 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 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    假设输入在名为的文件中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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看