【问题标题】:Merge tab delimited files one upon other without header将制表符分隔的文件一个接一个地合并,没有标题
【发布时间】:2018-05-13 20:07:08
【问题描述】:

您好,我有两个制表符分隔的文本文件

file.1.txt

Chr Start   End Ref Alt
chr1    4204560 4204560 T   C
chr1    9471179 9471181 ATA -
chr1    9471230 9471230 A   C
chr1    9471247 9471247 T   C
chr1    9471254 9471254 C   A
chr1    9471261 9471262 AA  -
chr1    9471262 9471262 A   C

AND 文件.2.txt

Chr Start   End Ref Alt
chr1    9471268 9471268 -   ACT
chr1    9471274 9471274 A   C
chr1    9471275 9471275 A   C
chr1    9471284 9471284 T   C
chr1    9471297 9471297 T   C
chr1    9471302 9471302 T   C
chr1    9471312 9471312 A   C

现在,如果我想合并这两个文件,排除第二个文件的标题行,然后将文件一个接一个地合并

Chr Start   End Ref Alt
chr1    4204560 4204560 T   C
chr1    9471179 9471181 ATA -
chr1    9471230 9471230 A   C
chr1    9471247 9471247 T   C
chr1    9471254 9471254 C   A
chr1    9471261 9471262 AA  -
chr1    9471262 9471262 A   C
chr1    9471268 9471268 -   ACT
chr1    9471274 9471274 A   C
chr1    9471275 9471275 A   C
chr1    9471284 9471284 T   C
chr1    9471297 9471297 T   C
chr1    9471302 9471302 T   C
chr1    9471312 9471312 A   C

如何使用 awk 命令或 shell 脚本来做到这一点?

附:实际文件的列数为168。

【问题讨论】:

    标签: shell awk


    【解决方案1】:

    关注awk 也可能对您有所帮助。

    awk 'FNR==NR{print;next} FNR!=NR && FNR>1{print}' file1.txt file2.txt
    

    或者更准确地说,不需要FNR!=NR

    awk 'FNR==NR{print;next} FNR>1{print}' file1.txt file2.tx
    

    【讨论】:

    • @RonicK,很高兴它对你有用。您可以通过对答案进行投票来感谢某人,并且也可以为了其他读者的利益而选择任何答案作为正确答案。
    【解决方案2】:

    您可以使用以下awk:

    awk 'FNR > 1 || NR == 1' file1 file2
    

    Chr Start   End Ref Alt
    chr1    4204560 4204560 T   C
    chr1    9471179 9471181 ATA -
    chr1    9471230 9471230 A   C
    chr1    9471247 9471247 T   C
    chr1    9471254 9471254 C   A
    chr1    9471261 9471262 AA  -
    chr1    9471262 9471262 A   C
    chr1    9471268 9471268 -   ACT
    chr1    9471274 9471274 A   C
    chr1    9471275 9471275 A   C
    chr1    9471284 9471284 T   C
    chr1    9471297 9471297 T   C
    chr1    9471302 9471302 T   C
    chr1    9471312 9471312 A   C
    

    或者只使用cattail

    cat file1; tail -n +2 file2
    

    【讨论】:

      【解决方案3】:

      另一个 awk:

      $ awk 'p<FNR;{p=FNR}' file1 file2
      

      输出:

      Chr Start   End Ref Alt
      chr1    4204560 4204560 T   C
      chr1    9471179 9471181 ATA -
      chr1    9471230 9471230 A   C
      chr1    9471247 9471247 T   C
      chr1    9471254 9471254 C   A
      chr1    9471261 9471262 AA  -
      chr1    9471262 9471262 A   C
      chr1    9471268 9471268 -   ACT
      chr1    9471274 9471274 A   C
      chr1    9471275 9471275 A   C
      chr1    9471284 9471284 T   C
      chr1    9471297 9471297 T   C
      chr1    9471302 9471302 T   C
      chr1    9471312 9471312 A   C
      

      即。如果先前的 FNR p 小于当前的,则输出。

      【讨论】:

        【解决方案4】:

        任何不这样做的理由:

        cat file1; tail +2 file2
        

        【讨论】:

          猜你喜欢
          • 2011-05-30
          • 2019-05-21
          • 1970-01-01
          • 1970-01-01
          • 2011-10-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多