使用 linux 中的条件交换列

Swap column with condition in linux

我的数据文件中有 4 列,第 1 列是字符编号,第二列是起始位点,第三列是结尾 site.The第四列是链 + 或 -。现在,如果第 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 ( == "+") {print ,,} & if ( == "-") { print ,, }}'  > hg-19_promoter_knownGene.filter3.bed

首先,将“&”更改为“;”。

这应该有效:

awk 'BEGIN {OFS="\t"} { if ( == "+") {print ,,} ; if ( == "-") { print ,, }}'