我有一个11GB
单词列表文件,该文件已经排序,因为每个单词都在自己的行上。
我需要删除从 开始的重复项和行077
。
我想我需要一起运行sed
,sort -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
,,,来执行此操作。sort
awk
(whichever is most optimal)
答案1
用于pv
进步。您不需要临时文件,因为您只是删除文本。只需覆盖该文件即可。如果文件已经排序,则不需要sort -u
,只需uniq
.
pv file | {
uniq | grep -v '^077'
perl -e 'truncate STDOUT, tell STDOUT'
} 1<> file
grep
perl 行是在完成写入时截断文件。
请注意,由于您是就地写入文件,因此如果犯了错误,您将无法返回。
答案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"