Python 通过将列与另一个文件中的列匹配来删除文件中的项

Python 通过将列与另一个文件中的列匹配来删除文件中的项,python,bash,perl,awk,gawk,Python,Bash,Perl,Awk,Gawk,我有两个文件f1.txt和f2.txt。如果文件1 f1.txt的第一列在文件2 f2.txt中有匹配的条目,我希望能够删除文件1 f1.txt中的行。f2每行只有一列,其中f.txt的每行将有两列或更多列。以下是一个例子: cat f1.txt 1, 10, 20, 30, 40, 50, 60, 70, 80, 90, 1000 2, 100, 200, 300, 400 3, 100, 2000, 3000 4, 400, 500 5, 500, 600, 700, 800, 900,

我有两个文件f1.txt和f2.txt。如果文件1 f1.txt的第一列在文件2 f2.txt中有匹配的条目,我希望能够删除文件1 f1.txt中的行。f2每行只有一列,其中f.txt的每行将有两列或更多列。以下是一个例子:

cat f1.txt

1, 10, 20, 30, 40, 50, 60, 70, 80, 90, 1000
2, 100, 200, 300, 400
3, 100, 2000, 3000
4, 400, 500 
5, 500, 600, 700, 800, 900, 1000
f2类。文本

2
4
以下是所需的输出:

1, 10, 20, 30, 40
3, 100, 2000, 3000, 400
5, 500, 600, 700, 800

修改模式文件f2.txt,如下所示:

sed -i -e 's/^/\^/;s/$/\\b/' file1
f2.txt将看起来像

^2\b
^4\b
etc.
然后将这些文件与grep进行比较:

grep -vf f2.txt f1.txt

将f2.txt中的列读入一个集合,然后对于f1.txt中的每一行,拆分出第一列并查看其是否在集合中。我们不编写您的代码,只是建议如何改进它。第1行和第5行的第6个字段和后续字段到哪里去了?3号线末端的400是从哪里来的?试着问这个问题:awk'FNR==NR{a[$1];next}{p=1;c=+$1;对于ifc中的i==i p=0}p'f2.txt f1.txt每当你编写一个shell循环来处理文本时,你的方法都是错误的。另外-如果f2.txt中有一行以1开头,而f1.txt中有一行以10开头,那么如果你的解决方案是这样的,你认为会发生什么?@Ed Morton你是对的,我忘记了逗号,假设数字之间用逗号分隔。您认为使用awk更好的方法是什么?是的,awk是发明shell的人为shell调用来操纵文本而发明的工具。整个脚本可以简洁、高效、健壮地完成,就像awk-F,'NR==FNR{a[$0];next}$“f2.txt f1中的1。txt@EdMorton检查我的编辑,你同意吗?如OP所述,如果f2.txt是一个单列,它就可以正常工作。但现在我意识到它在任何领域都会匹配,不仅仅是第一个领域,所以它不会起作用。