我在 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