从 11GB 单词列表文本文件中删除特定行和重复项

从 11GB 单词列表文本文件中删除特定行和重复项

我有一个11GB单词列表文件,该文件已经排序,因为每个单词都在自己的行上。

我需要删除从 开始的重复项和行077

我想我需要一起运行sedsort -u但我也想要一个实时输出display what's happening in terminal,如果可能的话显示time left.

所有这些都在一个命令中,并且它必须能够在Live CD或可能安装的Backtrack 5 rc3.

时间不是很重要,但如果有办法让我计算预计到达时间,我也许可以借用我爸爸的基于 i7 的 CPU,显然它的处理速度应该更快,否则我将不得不使用较旧的 core 2 CPU。

我在使用命令时面临的问题sort是,在VMware实时运行它的播放器下,它没有足够的空间,因此我必须32GB使用该命令在 USB上指定临时文件-T。我想如果我安装了Linux,这就不成问题了。

因此,请给我完整的命令,可以是sed,,,来执行此操作。sortawk(whichever is most optimal)

答案1

用于pv进步。您不需要临时文件,因为您只是删除文本。只需覆盖该文件即可。如果文件已经排序,则不需要sort -u,只需uniq.

pv file | {
  uniq | grep -v '^077'
  perl -e 'truncate STDOUT, tell STDOUT'
} 1<> file

grepperl 行是在完成写入时截断文件。

请注意,由于您是就地写入文件,因此如果犯了错误,您将无法返回。

答案2

我不确定您是否可以在不显着增加 sed/awk/shell 脚本复杂性的情况下显示预计到达时间或任何进度(并因此减慢整个过程)。如果你只是想让它尽可能快,就试试吧cat source_file | uniq | sed -n -e '/^077/!p' > dest_file。为了获得进度显示的近似值,您可能希望通过dest_file在后台或另一个终端中运行该命令来观察该命令的大小不断增长。

答案3

awk '!a[$0]++' "filename" > /tmp/dup
mv -f /tmp/dup "filename"

相关内容