根据不匹配的列更改数字的符号(+ 或 -)

根据不匹配的列更改数字的符号(+ 或 -)

我在 awk 脚本方面遇到了一些问题,该脚本可能应该非常简单。

我的文件看起来像这样,有数千行,第 2 列和第 3 列由 G、C、T 和 A 组成;和 4,5,6 数字(仅第 4 列有负值):

ID A1 A2  BETA  SE     P
1  A  T   0.01  0.001  0.2
2  G  G   0.02  0.003  0.4
3  C  T  -0.02  0.005  0.1
4  T  T  -0.01  0.006  0.2

我的目标是如果第 2 列和第 3 列不匹配,则更改第 4 列中数字的符号(正数变为负数,反之亦然)。所以结果应该是这样的:

ID A1 A2  BETA  SE     P
1  A  T  -0.01  0.001  0.2
2  G  G   0.02  0.003  0.4
3  C  T   0.02  0.005  0.1
4  T  T  -0.01  0.006  0.2

我尝试使用 awk 来尝试这样做:

awk '{if($2 != $3 print $0}'

我意识到这并不是一个简单问题的开始,但我不知道如何一次性改变两者+-反之亦然。

如果有一个解决方案就太好了,如果有步骤说明它如何更好地工作!

答案1

使用awk

awk 'NR!=1&&$2!=$3{$4=$4*-1};1' file
  • 如果条件$2!=$3为真且不是第一行 ( NR!=1),则将 的值$4与相乘-1

如果您想再次使用固定列column

awk 'NR!=1&&$2!=$3{$4=$4*-1};1' file | column -t
  • -t的标志自行column确定列数并创建表。

输出:

ID  A1  A2  BETA   SE     P
1   A   T   -0.01  0.001  0.2
2   G   G   0.02   0.003  0.4
3   C   T   0.02   0.005  0.1
4   T   T   -0.01  0.006  0.2

相关内容