如何删除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. 条件一:字段 5 包含i_r, 或
  4. 条件二:字段 5 包含u_v, 或
  5. 条件三:字段6为1,则
  6. print线

符合任何条件的行都不会被打印(“删除”)。

示例输出:

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

相关内容