连接文本文件的两列

Concatenate two columns of a text file

我有一个类似

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

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

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

我需要代码来处理具有不同列数的文本文件,所以我不能使用 awk 'BEGIN{FS="\t"} {print "\t""-""\t""\t"}' file

awk 是我为任务考虑的第一个工具,也是我正在尝试学习的工具,所以我对使用它的答案非常感兴趣,但是任何其他工具的解决方案都会非常有用赞赏。

使用 sed 命令 tsv 文件:

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

输出:

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

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   ...

以下 awk 可能会对您有所帮助,如果您不担心小 space 将在第三个字段无效时创建。

awk '{="-";=""} 1'  Input_file