首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从11 and的file列表文本文件中删除特定行和重复项

从11 and的file列表文本文件中删除特定行和重复项
EN

Unix & Linux用户
提问于 2012-11-27 00:14:37
回答 3查看 847关注 0票数 1

我有一个11GB word-list文件,它已经被排序,因为每个单词都在它自己的行上。

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

我想我需要同时运行sedsort -u,但我也想要一个实时输出display what's happening in terminal,并在可能的情况下显示time left

所有这些都在一个命令中,并且必须能够在Live CD或可能安装的Backtrack 5 rc3下以最佳的性能运行。

时间不是很重要,但如果我有一个方法来计算ETA,我可能可以借用我爸爸的基于i7的CPU,这显然应该处理它更快,否则我将不得不使用一个较老的核心2 CPU。

sort命令面临的问题是,在运行VMware播放器的情况下,它没有足够的空间,所以我必须使用-T命令在32GB上指定临时文件。如果我安装了Linux,我想这不会是个问题。

所以请给我一个完整的命令,不管是sedsortawk来做(whichever is most optimal)

EN

回答 3

Unix & Linux用户

发布于 2012-11-27 08:46:23

使用pv进行进度。因为您只是删除文本,所以您不需要一个诱饵文件。只需覆盖文件就行了。如果文件已经排序,则不需要sort -u,只需要uniq

代码语言:javascript
复制
pv file | {
  uniq | grep -v '^077'
  perl -e 'truncate STDOUT, tell STDOUT'
} 1<> file

perl行是在被grep完成时截断文件来编写的。

请注意,由于您正在就地编写文件,如果您犯了错误,您将无法返回。

票数 7
EN

Unix & Linux用户

发布于 2012-11-27 07:36:34

我不确定您是否能够在不显著增加sed/awk/shell脚本的复杂性的情况下使用ETA或任何进度显示(并因此减缓整个过程)。如果您只希望它尽可能快,只需尝试cat source_file | uniq | sed -n -e '/^077/!p' > dest_file。对于进度显示的近似值,您可能需要查看dest_file的大小,该命令在后台或另一个终端中运行。

票数 2
EN

Unix & Linux用户

发布于 2017-12-24 08:34:16

代码语言:javascript
复制
awk '!a[$0]++' "filename" > /tmp/dup
mv -f /tmp/dup "filename"
票数 -1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/56841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档