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

AWK: Need to swap values between two columns if the left one is smaller than the right one

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

awk 中是否有任何一种衬垫可以交换这两个值,以便 table 始终在第 2 列中获得较小的值而在第 3 列中获得较大的值?

chr01    100    200
chr02    300    150 

因此在此示例中,所需的输出为:

chr01    100    200
chr02    150    300 

你可以使用 awk,

awk '>{x=;=;=x}1' file
awk '{ printf("%s %d %d\n",,( < ) ?  : ,( < ) ?  : ) }' file

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

$ awk ' >  { temp = ;  = ;  = temp } 1' OFS='\t' file
末尾的

1{print}的普通shorthand,所以每一行都打印出来。将输出字段分隔符 OFS 设置为制表符可保留格式。

或者:

$ awk -F'\t' ' >  { [=11=] =  FS  FS  } 1' file

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