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