所以到目前为止我得到的是一个Bed-Table文件,这个文件的问题是,在某些行中,第2列中的值大于第3列中的值。
在awk中是否有任何一个衬垫,它会交换这两个值,这样表格总是得到col 2中较小的值而col 3中较大的值?
chr01 100 200
chr02 300 150
所以在这个例子中,所需的输出是:
chr01 100 200
chr02 150 300
答案 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