我有一个庞大的文件,每行都是唯一的。我收集了一些较小的文件(但仍然相对较大),其中的行不是唯一的。该收藏品在不断增长。我需要将小文件添加到大文件中,并确保大文件中没有重复项。现在,我要做的是将所有文件添加到一个文件中,然后对它运行sort -u。但是,这样最终会重新扫描整个大文件,随着输入的文件越来越多,整个文件花费的时间越来越长,而且效率似乎很低。有更好的方法吗?
答案 0 :(得分:3)
如果已经对大文件进行了排序,则sort -u
仅 较小的文件,然后sort -u -m
(将)结果与大文件合并(合并)会更有效。 -m
假设输入已经被单独排序。
示例(未经测试):
#!/bin/bash
# Merges unique lines in the files passed as arguments into BIGFILE.
BIGFILE=bigfile.txt
TMPFILE=$(mktemp)
trap "rm $TMPFILE" EXIT
sort -u "$@" > "$TMPFILE"
sort -um "$TMPFILE" "$BIGFILE" -o "$BIGFILE"
This answer解释了为什么-o
是必需的。
如果您喜欢流程替代,甚至可以单线完成:
sort -um <(sort -u "$@") "$BIGFILE" -o "$BIGFILE"