我在Python中有一个实用程序脚本:
#!/usr/bin/env python
import sys
unique_lines = []
duplicate_lines = []
for line in sys.stdin:
if line in unique_lines:
duplicate_lines.append(line)
else:
unique_lines.append(line)
sys.stdout.write(line)
# optionally do something with duplicate_lines
这个简单的功能(不需要首先排序的uniq
,稳定的排序)必须作为一个简单的UNIX实用程序提供,不是吗?也许是管子里的过滤器的组合?
问的理由:在一个我不能从任何地方执行Python的系统上需要这个功能。
发布于 2012-07-18 07:17:58
UNIX Bash脚本博客suggests
awk '!x[$0]++'
这个命令告诉awk要打印哪些行。变量$0
保存一行的全部内容,方括号是数组访问。因此,对于文件的每一行,如果先前未设置(!
)该节点的内容,则会递增数组x
的节点,并打印该行。
发布于 2017-08-22 11:32:35
要从2个文件中删除重复项,请执行以下操作:
awk '!a[$0]++' file1.csv file2.csv
发布于 2012-07-24 00:43:38
上面Michael Hoffman的解决方案简明扼要。对于较大的文件,Schwartzian变换方法涉及使用awk添加索引字段,然后进行多轮排序和uniq,所需的内存开销较少。以下代码片段在bash中有效
awk '{print(NR"\t"$0)}' file_name | sort -t$'\t' -k2,2 | uniq --skip-fields 1 | sort -k1,1 -t$'\t' | cut -f2 -d$'\t'
https://stackoverflow.com/questions/11532157
复制相似问题