我有一个11GB word-list文件,它已经被排序,因为每个单词都在它自己的行上。
我需要删除从077开始的重复和行。
我想我需要同时运行sed和sort -u,但我也想要一个实时输出display what's happening in terminal,并在可能的情况下显示time left。
所有这些都在一个命令中,并且必须能够在Live CD或可能安装的Backtrack 5 rc3下以最佳的性能运行。
时间不是很重要,但如果我有一个方法来计算ETA,我可能可以借用我爸爸的基于i7的CPU,这显然应该处理它更快,否则我将不得不使用一个较老的核心2 CPU。
sort命令面临的问题是,在运行VMware播放器的情况下,它没有足够的空间,所以我必须使用-T命令在32GB上指定临时文件。如果我安装了Linux,我想这不会是个问题。
所以请给我一个完整的命令,不管是sed,sort,awk来做(whichever is most optimal)。
发布于 2012-11-27 08:46:23
使用pv进行进度。因为您只是删除文本,所以您不需要一个诱饵文件。只需覆盖文件就行了。如果文件已经排序,则不需要sort -u,只需要uniq。
pv file | {
uniq | grep -v '^077'
perl -e 'truncate STDOUT, tell STDOUT'
} 1<> fileperl行是在被grep完成时截断文件来编写的。
请注意,由于您正在就地编写文件,如果您犯了错误,您将无法返回。
发布于 2012-11-27 07:36:34
我不确定您是否能够在不显著增加sed/awk/shell脚本的复杂性的情况下使用ETA或任何进度显示(并因此减缓整个过程)。如果您只希望它尽可能快,只需尝试cat source_file | uniq | sed -n -e '/^077/!p' > dest_file。对于进度显示的近似值,您可能需要查看dest_file的大小,该命令在后台或另一个终端中运行。
发布于 2017-12-24 08:34:16
awk '!a[$0]++' "filename" > /tmp/dup
mv -f /tmp/dup "filename"https://unix.stackexchange.com/questions/56841
复制相似问题