我有一个超过 50000 行的主文件,我需要从实际文件中删除大约 20000 行,为此我使用的grep -vE
命令显示错误,因为参数太多。
我正在使用sed
命令删除那些使用 for 循环的内容。但删除需要很长时间,因为sed
要初始化 20000 个命令。
for i in `cat 20000-words.txt`; do
sed -i -e "/$i/ d" 50000-lines.txt
done
答案1
假设 20000-words.txt 已经是每行一个单词的格式,请执行以下操作:
grep -vFf 20000-words.txt 50000-lines.txt >50000-filtered-lines.txt
grep 的参数-f
告诉它从文件中读取模式,每行一个模式,而不是将它们作为命令行参数。 grep 的参数-F
告诉它模式应该用作文字字符串而不是正则表达式。
答案2
要做到这一点grep
并且假设您没有重复的行,您可以:
$ sort 20000-words.txt 50000-lines.txt | uniq -u
或者:
$ comm -23 <(sort 50000-lines.txt) <(sort 20000-words.txt)