一致しない列に基づいて数値記号(+または-)を変更する

一致しない列に基づいて数値記号(+または-)を変更する

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

関連情報