我有一个包含 75000 个项目的文本文件,每个项目 2 行。第 1 行有一个标识符,第 2 行有一个文本字符串。
我需要删除列表中或可以放入文件中的 130 个项目、随机标识符。
我可以删除一件元素,但不能删除多件元素。
我尝试通过管道传输标识符并获得一个空的输出文件。
我尝试了 sed -e 'expression' inputfile > outfile
的重复命令。这是可行的,但需要一个新的输出文件,然后该文件将成为下一次迭代的输入文件,依此类推。这可能是最后的手段。
我试过sed -i in iteration
;这会崩溃,错误是没有输入文件名称的文件。显然情况并非如此,正如我所看到的, ls it 并 grep 其中标识符的数量。只有 sed 似乎无法读取它。
我什至在网上找到了一个针对这个问题的 python/biopython 脚本,它非常简单,并且不会给出错误消息,但它也只删除了第一项。
我认为这与实际上不存在的文件属性/临时文件有关(?)。 我正在使用 Ubuntu 12.04“精确” 我该如何解决这个问题?
最佳答案
快速而肮脏(不检查修改文件是否已创建,...)
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
关于linux - ubuntu linux sed 影响文件属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34209407/