使用sed从文本文件中的文件中删除多个文件名

时间:2016-01-22 17:32:33

标签: linux bash sed

我试图从文件夹中列出的所有文件中删除包含basename的每一行。

我在一个文件夹中有2 000 000个文件,但应该有2 500 000个文件。我有一个missing.txt文件,逐行包含所有2.5M文件名。我想删除已经重启过程的所有行,并完成500 000个丢失的文件。

我非常简单的脚本是:

for FILE in ../pdb/*; do
BNAME="$(basename ${FILE} _mini.pdb)"
sed "/${BNAME}/d" ./missing.txt
done

问题是sed没有删除missing.txt文件中的$ BNAME行。我对sed做错了什么?

1 个答案:

答案 0 :(得分:1)

我会使用不同的方法:

首先创建当前文件的排序列表:ls | sort > new_list.txt。它应该包含~2ml行。

然后对2.5ml文件sort missing.txt > old_list.txt

的列表进行排序

最后提取差异:comm -23 old_list new_list

它比sed的2ML实例更有效。