![使用 awk 进行数据操作](https://linux22.com/image/53995/%E4%BD%BF%E7%94%A8%20awk%20%E8%BF%9B%E8%A1%8C%E6%95%B0%E6%8D%AE%E6%93%8D%E4%BD%9C.png)
我有一个以下格式的输入文件。
#track
chr11 61731756 61735132 FTH1 -
chr12 6643584 6647537 GAPDH +
chr11 18415935 18429765 LDHA +
chr12 21788274 21810728 LDHB -
chr22 24236564 24237409 MIF +
chr4 6641817 6644470 MRFAP1 +
chr15 72491369 72523727 PKM -
chr10 73576054 73611082 PSAP -
chr2 85132762 85133799 TMSB10 +
chr13 45911303 45915297 TPT1 -
我想要一个输出文件,其中如果第 5 列是 +,则从第 2 列减去 5000,然后将 2000 添加到第 3 列,以便输出以下内容
chr11 18410935 18431765 LDHA +
chr2 85127762 85135799 TMSB10 +
如果第 5 列为“-”,则第 3 列加 5000,第 2 列减去 2000,得到以下输出
chr11 61729756 61740132 FTH1 -
chr12 21786274 21815728 LDHB -
所以我希望输出的顺序与输入的顺序相同。我也想按原样输出第一行#track。
我想在 awk 中执行此操作。我该如何执行此操作。
答案1
这可能有效
awk '$5 == "+" {$2-=5000;$3+=2000}; $5 == "-"{$3+=5000;$2-=2000};{print}' file