在linux中使用条件交换列

时间:2015-11-17 11:30:16

标签: linux text-processing

我的数据文件中有4列,第1列是chr编号,第2列是起始站点,第3列是结束站点。第4列是strand +或 - 。现在,如果第4列是负链,我想将第3列与第2列交换,但对于+链,我想要不做任何更改。

Chr1 94847  3737474  +
Chr1 27374  3948475  +
Chr1 93947  9283736  -

所以前两行是好的,但是对于第三行,我想要将第2列与第3列交换,就像第4列中的链一样 - 。

我尝试了这段代码但是系统会生成一个错误&操作数...

cat hg-19_promoter_knownGene.filtered.bed | awk 'BEGIN {OFS="\t"} { if ($4 == "+") {print $1,$2,$3} & if ($4 == "-") { print $1,$3,$2 }}'  > hg-19_promoter_knownGene.filter3.bed

1 个答案:

答案 0 :(得分:1)

首先,选择“&”到“;”。

这应该有效:

awk 'BEGIN {OFS="\t"} { if ($4 == "+") {print $1,$2,$3} ; if ($4 == "-") { print $1,$3,$2 }}'