首页 > 解决方案 > 如何使用多个模式删除多个列?

问题描述

我有一个这样的文件(由 \t 分隔):

gene1 previous name1
gene2 previous name2
gene3 previous name3
gene4 previous name4

我想删除第一列中包含gene2gene4的列。我知道我可以使用sedawk|搜索多个模式。但实际上我的文件有数千行,我想删除数百列(我有一个变量,其中包含我想要搜索的模式)。我怎样才能做到这一点而不必手动编写所有模式?

模式变量:

gene2
gene4

预期输出:

gene1 previous name1
gene3 previous name3

我只想 grep 第一列,因为单词gene2(或*gene4)可能在第三列中。

标签: awksed

解决方案


使用grep

cat > in_file <<EOF
gene1 previous name1
gene2 previous name2
gene3 previous name3
gene4 previous name4
EOF

cat > pat_file <<EOF
gene2
gene4
EOF

grep -v -f pat_file in_file

输出:

gene1 previous name1
gene3 previous name3

在这里,grep使用以下选项:
-v:打印匹配的行。:从文件
-f file中获取模式,每行一个。


推荐阅读