我有一些大型的制表符分隔文本文件,如下所示:
#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
- 将字段分隔符设置为制表符
\t
- 如果满足以下条件不是真的
!( ... )
- 条件一:字段 5 包含
i_r
, 或 - 条件二:字段 5 包含
u_v
, 或 - 条件三:字段6为
1
,则 print
线
符合任何条件的行都不会被打印(“删除”)。
示例输出:
#CHR POS REF ALT EFC GOM
9 600 T G d_i(XXXXXX);f_v(XXXXXXXX) -