连接文本文件的两列

时间:2018-01-22 16:49:47

标签: text awk gawk

我有像

这样的tsv文件
resX<-c()
resY<-c()
Mystep <- 2 

for(i in seq(0, 10, by = Mystep  )){
  resX[i]  <-i*10
  resY[i]  <-i/10     
}

Results<-as.data.frame(cbind(resX,resY))

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

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是我为此任务考虑的第一个工具,也是我正在努力学习的工具,因此我对使用它的答案非常感兴趣,但任何其他工具的任何解决方案都将不胜感激。

3 个答案:

答案 0 :(得分:2)

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

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

输出:

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

以下awk可能对您有所帮助,以防您不担心第3个字段无效时会创建的空间很小。

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