我有一个数据集,其中每个人都是通过两列的组合来标识的(column1 = familynumber,column2 = individualnumber),我必须从该数据集中删除个人(行),但是同样,给出了要删除的个人列表格式相同。
数据集示例:
F2 15 0
F2 17 0
F3 15 0
F4 17 0
F4 25 0
F6 32 0
F6 38 0
要删除的列表(要过滤的模式)示例:
F2 15
F4 17
F6 32
输出示例
F2 17 0
F3 15 0
F4 25 0
F6 38 0
我知道grep具有使用模式组合'pattern1.*pattern2'
(AND)的功能,但我还需要此功能才能在2种模式列表中起作用(一个文件包含2列,每个文件包含2个列,{ {1}}),我都没有运气尝试过。无论哪种方式,我都不知道如何正确地结合这两个功能,而且我没有想法。
我会提出任何建议,谢谢
这是我到目前为止尝试过的代码
-f
其中egrep -f rejected.i -v dataset.exm
是包含要过滤的模式的两列的文件
和
rejected.i
其中i.rej1和i.rej2分别是要过滤的模式的第一和第二列。
我希望它足够清楚。 再次谢谢你
答案 0 :(得分:0)
$ cat i.rej1
F2
F4
F6
$ cat i.rej2
15
17
32
您可以使用paste
创建特征码文件,并用正则表达式将制表符替换为一个或多个空格
$ paste i.rej1 i.rej2 | sed 's/\t/\\s+/'
F2\s+15
F4\s+17
F6\s+32
使用Process Substitution,您的grep会读取
$ grep -Evf <(paste i.rej1 i.rej2 | sed 's/\t/\\s+/') input
F2 17 0
F3 15 0
F4 25 0
F6 38 0
paste i.rej1 i.rej2 | sed 's/\t/\\s+/' | grep -Evf- input
会做同样的事情。