我试图从文件夹中列出的所有文件中删除包含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做错了什么?
答案 0 :(得分:1)
我会使用不同的方法:
首先创建当前文件的排序列表:ls | sort > new_list.txt
。它应该包含~2ml行。
然后对2.5ml文件sort missing.txt > old_list.txt
最后提取差异:comm -23 old_list new_list
它比sed的2ML实例更有效。