txtファイルの列から特定の名前を含む行を削除する方法

txtファイルの列から特定の名前を含む行を削除する方法

次のようにタブ区切りの大きなテキストファイルがあります。

#CHR  POS  REF  ALT    EFC                         GOM
1    100   A    G     u_v(XXXXXX);i_v(XXXXXXX)     0
2    465   T    C     d_r(XXXXXX);i_r(XXXXXXXX)    1
9    600   T    G     d_i(XXXXXX);f_v(XXXXXXXX)    -

次の行を削除したい

(1)「EFC」列の内容に「i_r」または「u_v」(「(XXXXXX)」などを含む)が含まれています。

または

(2)「GOM」列の値は1です。

それでは、awkまたはsedを使用して目的のファイルを取得する方法は?

ベストアンサー1

awkに直接翻訳:

awk -F'\t' '!($5 ~ /i_r/ || $5 ~ /u_v/ || $6 == 1) { print; }' input
  1. フィールド区切り記号をタブに設定\t
  2. 次の条件を満たす場合いいえ本物!( ... )
  3. 条件 1: フィールド 5 に、i_rまたはが含まれます。
  4. 条件2:フィールド5に、u_vまたはが含まれます。
  5. 条件3:フィールド6がある1場合
  6. printワイヤー

基準に一致する行は印刷されません(「削除」)。

出力例:

#CHR    POS     REF     ALT     EFC     GOM
9       600     T       G       d_i(XXXXXX);f_v(XXXXXXXX)       -

おすすめ記事