おそらく、非常に簡単でなければならない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