我有一个75000项的文本文件,每个项目有2行。第1行有一个标识符,第2行有一个文本字符串。
我需要删除130个项目,列表中的随机标识符或可以放入文件。
我可以执行一个项目的删除,但不能超过一个。
我尝试管道标识符并获得一个空输出文件。
我尝试了sed -e 'expression' inputfile > outfile
的重复命令。这有效,但需要一个新的输出文件,然后成为下一次迭代的输入文件,依此类推。这可能是最后的手段。
我试过sed -i in iteration
;这崩溃了,错误是输入文件的名称没有文件。显然不是这种情况,正如我所看到的那样,是它并且grep其中的标识符数量。只有sed似乎无法阅读它。
我甚至在网上发现了一个python / biopython脚本来解决这个问题,它非常简单并且没有给出错误信息,但它也只删除了第一个项目。
我认为它与文件属性/临时文件有关,而这些文件并不存在(?)。 我正在使用Ubuntu 12.04' Precise' 我该如何解决这个问题?
答案 0 :(得分:1)
快速且脏(不检查是否创建了修改文件,...)
sed
sed 's#.*#/&/{N;d;}#' YourListToExclude > /tmp/exclude.sed
sed -f /tmp/exclude.sed YourDataFile > /tmp/YourDataFile.tmp
mv /tmp/YourDataFile.tmp YourDataFile
rm /tmp/exclude.sed
AWK
awk 'FNR==NR{ex=(ex==""?"":ex"|")$0;next}$0!~ex{print;getline;print;next}{getline}' YourListToExclude YourDataFile > /tmp/YourDataFile.tmp
mv /tmp/YourDataFile.tmp YourDataFile