![如何删除txt文件中一列中包含某些名称的行](https://linux22.com/image/10151/%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4txt%E6%96%87%E4%BB%B6%E4%B8%AD%E4%B8%80%E5%88%97%E4%B8%AD%E5%8C%85%E5%90%AB%E6%9F%90%E4%BA%9B%E5%90%8D%E7%A7%B0%E7%9A%84%E8%A1%8C.png)
我有一些大型的制表符分隔文本文件,如下所示:
#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) -