特定の列で可能な3つの変数のいずれとも等しくない行を編集します(好ましくはawkで)。

特定の列で可能な3つの変数のいずれとも等しくない行を編集します(好ましくはawkで)。

特定の列で行を「X」に置き換える必要がありますが、3つの可能なパターン(3つの変数)のいずれかと一致しない場合にのみ適用されます。列は常に同じ列ではないため、コードは列番号自体が変数番号のままで動作する必要があります。 3つの可能なモードについても同様です。デモなしで説明するのは難しいです。この例では、列1を見て、「GrabVariantOption」に基づいて「X」に固有の項目がどのように変更されるかを見ると、私が説明できるものよりもはっきりします。

入力例:

A,A,A,X
A,G,T,X
C,A,G,T
A,C,G,T
f,X,A,g
g,T,A,A
m,s,G,A
G,s,m,A

例3可能なパターン:

GrabVariantOption1=A
GrabVariantOption2=g
GrabVariantOption3=G

いくつかの疑似コードは、これが私が望む仕事の原則です。

Column=1   

awk -F ',' -v a=$GrabVariantOption1 -v b=$GrabVariantOption2 -v c=$GrabVariantOption3 -v x=$Column '{$x; if NR!=a && NR!=b && NR!=c; flag=1} {if flag=1 NR==X }'

出力例:

A,A,A,X
A,G,T,X
X,A,G,T
A,C,G,T
X,X,A,g
g,T,A,A
X,s,G,A
G,s,m,A

ベストアンサー1

awk -F, -v OFS=, \
  -v "a=$GrabVariantOption1" \
  -v "b=$GrabVariantOption2" \
  -v "c=$GrabVariantOption3" \
  -v "x=$Column" '
  $x != a && $x != b && $x != c {$x = "X"}
  {print}'

または、ここに単一のASCII文字があります。

awk -F, -v OFS=, \
  -v "pattern=^[$GrabVariantOption1$GrabVariantOption2$GrabVariantOption3]\$" \
  -v "x=$Column" '
  $x !~ pattern {$x = "X"}
  {print}'

NRawk現在のレコード番号(ここでは、基本レコード区切り文字を含む行番号)を保持する特殊変数です。$フィールドを逆参照する演算子です。したがって、xフィールド番号が最初の$ xフィールドの内容を提供する場合。x

おすすめ記事