【问题标题】:Exclude a column when pasting two data files粘贴两个数据文件时排除一列
【发布时间】:2014-06-01 07:57:58
【问题描述】:

我有一个文件“dat1.txt”,类似于:

0 5.71159e-01
1 1.92632e-01
2 -4.73603e-01

另一个文件“dat2.txt”是:

0 5.19105e-01
1 2.29702e-01
2 -3.05675e-01

将这两个文件合并为一个,我使用

paste dat1.txt dat2.txt > data.txt

但我不希望输出文件中第二个文件的第一列。如何修改unix命令?

【问题讨论】:

    标签: bash paste


    【解决方案1】:

    如果您的文件按第 1 列排序,您可以尝试:

    join dat[12].txt
    

    【讨论】:

    • 谢谢...它也有效。但我不知道我是否可以接受这两个答案。如果我点击这个被接受,那么前一个就变得不被接受了....但是这个也可以。我如何投票给你的答案?
    • @user3389597 你好,你只能投票给一个:)。见这里meta.stackexchange.com/questions/5234/…。你可以就这样离开它......
    【解决方案2】:

    你可以在 awk 中尝试这个,

    $ awk 'FNR==NR {a[FNR]=$0;next} {print a[FNR],$2}' data1.txt data2.txt
    0 5.71159e-01 5.19105e-01
    1 1.92632e-01 2.29702e-01
    2 -4.73603e-01 -3.05675e-01
    

    【讨论】:

      【解决方案3】:

      使用cut 删除第一列,然后通过管道连接到paste

       cut -d' ' -f 1 --complement dat2.txt  | paste dat1.txt - > data.txt
      

      请注意,过去 ecommand 中的 - 表示从 stdin 读取,而不是第二个文件。

      如果cut 在 OSX 上被破坏,awk 可能会工作。

       awk '{for (i=2; i<=NF; i++) print $i}'  dat2.txt  | paste dat1.txt - > data.txt
      

      【讨论】:

      • 显示如下错误: cut: 非法选项 -- -- 用法:cut -b list [-n] [file ...] cut -c list [file ...] cut -f列表 [-s] [-d delim] [文件 ...]
      • @user3389597,您的错误未呈现。另外,您使用的是 Unix 还是 OSX?
      • @user3389597,我会建议一个替代解决方案,但是很多 Unix 工具在 OSX 上的工作很有趣。您也可以尝试其他答案。
      • @user3389597,现在我们有各种适用于 OSX 的工作解决方案。 :)
      【解决方案4】:
      paste  dat1.txt <(cut -d" " -f2- dat2.txt)
      

      使用cut 删除第1 列,并使用进程替换在paste 中使用其输出

      输出:

      0 5.71159e-01   5.19105e-01
      1 1.92632e-01   2.29702e-01
      2 -4.73603e-01  -3.05675e-01
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-18
        • 2013-08-23
        • 2021-12-19
        • 1970-01-01
        • 2017-03-21
        • 1970-01-01
        • 2017-02-12
        相关资源
        最近更新 更多