【发布时间】:2015-12-10 18:44:43
【问题描述】:
我有一个包含 75000 个项目的文本文件,每个项目 2 行。第 1 行有一个标识符,第 2 行是一个文本字符串。
我需要删除 130 个项目,我在列表中或可以放入文件中的随机标识符。
我可以对一件物品进行移除,但不能超过一件。
我尝试管道标识符并获得一个空的输出文件。
我尝试了sed -e 'expression' inputfile > outfile 的重复命令。这可行,但需要一个新的输出文件,然后该文件将成为下一次迭代的输入文件,依此类推。这可能是最后的手段。
我试过sed -i in iteration;这会崩溃,错误是输入文件的名称没有文件。如我所见,显然不是这种情况, ls it 并 grep 中的标识符数量。只有 sed 似乎无法读取它。
我什至在网上找到了一个 python/biopython 脚本来解决这个确切的问题,它非常简单并且不给出错误消息,但它也只删除了第一项。
我认为这与实际上不存在的文件属性/临时文件有关(?)。 我正在使用 Ubuntu 12.04 'Precise' 我该如何解决这个问题?
【问题讨论】:
-
请在您的问题中添加示例输入和该示例输入所需的输出。
-
使用
-i和命名您自己的 tmp 文件之间的功能差异为零。在这两种情况下都使用临时文件,只是在后者中你可以命名它。对于您选择使用的任何 python 脚本,同上。没有 UNIX 工具可以进行真正的内联文件编辑 - 即使ed使用原始文件大小的内部缓冲区,然后在完成后覆盖原始文件。几乎可以肯定,您最好只编写一个 awk 脚本来一次性完成所有更改。 -
你能举一个独立的例子吗?我在想可能是一个使用例如的 bash 脚本。
seq生成一个合适的输入文件,然后运行你的(可能简化的)sed命令?如果您随后证明您的结果与预期有何不同,我们或许可以提供帮助。