【问题标题】:Concatenate two columns of a text file连接文本文件的两列
【发布时间】:2018-07-01 08:59:23
【问题描述】:

我有一个类似 tsv 的文件

1   2   3   4   5   ...
a   b   c   d   e   ...
x   y   z   j   k   ...

如何合并两个连续的列,比如第二和第三,以获得

1   2-3   4   5   ...
a   b-c   d   e   ...
x   y-z   j   k   ...

我需要代码来处理具有不同列数的文本文件,所以我不能使用像 awk 'BEGIN{FS="\t"} {print $1"\t"$2"-"$3"\t"$4"\t"$5}' file 这样的东西

awk 是我为这项任务考虑的第一个工具,也是我正在努力学习的工具,所以我对使用它的答案非常感兴趣,但任何其他工具的解决方案都将不胜感激。

【问题讨论】:

    标签: text awk gawk


    【解决方案1】:

    使用 tsv 文件的简单 sed 命令:

    sed 's/\t/-/2' file
    

    输出:

    1   2-3 4   5   ...
    a   b-c d   e   ...
    x   y-z j   k   ...
    

    【讨论】:

      【解决方案2】:

      关注awk 可能对您有同样的帮助,以防您不担心第三个字段无效时将创建的空间很小。

      awk '{$2=$2"-"$3;$3=""} 1'  Input_file
      

      【讨论】:

      • 不是最优雅的解决方案,但它告诉我我可以自己做到这一点:-) +1
      【解决方案3】:

      awk:

      awk -v OFS='\t' -v col=2 '{
          $(col)=$(col)"-"$(col+1);              # merge col and col+1
          for (i=col+1;i<NF;i++) $(i)=$(i+1);    # shift columns right of col+1 by one to the left
          NF--;                                  # remove the last field
      }1' file                                   # print the record
      

      输出:

      1   2-3   4   5   ...
      a   b-c   d   e   ...
      x   y-z   j   k   ...
      

      【讨论】:

      • 我希望你不介意我将 RomanPerekhrest 的答案标记为最佳答案,我认为遇到这个问题的人会得到更好的服务。我想看看如何使用awk 来完成它,你向我展示了。谢谢:-)
      • 我当然不介意 :) 很高兴我的回答也对您有所帮助。
      猜你喜欢
      • 2022-01-27
      • 2018-11-23
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多