AWK:如果左列小于右列,则需要在两列之间交换值

时间:2015-05-29 11:01:22

标签: awk sed swap tabular

所以到目前为止我得到的是一个Bed-Table文件,这个文件的问题是,在某些行中,第2列中的值大于第3列中的值。

在awk中是否有任何一个衬垫,它会交换这两个值,这样表格总是得到col 2中较小的值而col 3中较大的值?

chr01    100    200
chr02    300    150 

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

chr01    100    200
chr02    150    300 

3 个答案:

答案 0 :(得分:2)

如果列的顺序错误,只需使用临时变量交换列:

$ 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重新排列行的内容。

答案 1 :(得分:0)

你可以使用awk,

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

答案 2 :(得分:0)

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