2015-05-29 86 views
0

所以到目前为止我得到的是一个Bed-Table文件,这个文件的问题是,在某些行中,值在第2列中的值大于第3列中的值。AWK:需要交换两列之间的值,如果左边的一个比右边的小

awk中是否有任何一个班轮,它们将交换这两个值,以便表格总是在列2中获得较小的值,在列3中获得较大的值?

chr01 100 200 
chr02 300 150 

所以在这个例子中,所需的输出将是:

chr01 100 200 
chr02 150 300 
+0

这是一张床单文件吗?即使谷歌似乎并不现在。 –

+0

床文件是一张表格,其中包含基因组内DNA序列的坐标。您可以使用它从基因组中提取序列,或者进行分析,如是否有基因,这些基因彼此接近或序列相互重叠。 – JadenBlaine

回答

1

只是交换列,如果他们是在错误的订单,使用临时变量:

$ awk '$2 > $3 { temp = $3; $3 = $2; $2 = temp } 1' OFS='\t' file 

1最后是{print}的通用速记,所以每行都打印出来。将输出字段分隔符OFS设置为制表符保留了格式。

或者:

$ awk -F'\t' '$2 > $3 { $0 = $1 FS $3 FS $2 } 1' file 

如果必要重新排列行的内容,使用输入字段分隔符FS它已被设置为制表符。

0

你可以用awk,

awk '$2>$3{x=$3;$3=$2;$2=x}1' file 
+2

该命令会切换所需的值,但它会导致错误,因为它会以某种方式删除列之间的选项卡 – JadenBlaine

+0

'awk'$ 2> $ 3 {x = $ 3; $ 3 = $ 2; $ 2 = x} 1' sed的/ \ +/\ t/g'' –

0
awk '{ printf("%s %d %d\n",$1,($2 < $3) ? $2 : $3,($2 < $3) ? $3 : $2) }' file 
相关问题