如何解决从Shell中的文件删除模式行的快速方法
我有一个大约60000行的file1,和一个大约20000行的file2。我需要从file1删除file2中存在的行。 File2还包含。*,以从file1中删除类似的模式。
文件1:
ABC DEG
bhdh jdjjd
cdhhd jdjd
ABC hjj
文件2:
ABC.*
cdhhd jdjd
输出应为:
bhdh jdjjd
现在,我正在使用以下代码。
while read -r line
do
sed -i "/${line}/d" $file1
done < "$file2"
使用此代码,大约需要30分钟才能获得输出。我确实需要一种更好的方法来从file1中删除这些行。
解决方法
这完全适合您的任务:
grep -vf file2 file1
-v
将排除file1中与file2中任何模式匹配的行
注意:循环非常慢,因为您使用bash循环逐行读取模式文件,并且执行了数千个sed
命令,每个模式一个。另请参阅here,了解这是一种不良做法的原因。
注意:用上述命令的输出替换file1:
grep -vf file2 file1 > file1.tmp && mv file1.tmp file1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。