linux - 有没有办法擦除文件中的所有重复项并计算有多少重复项,同时保持文件的原始顺序
问题描述
我有这样的文件
2/2
2/2
2/2
3/3
1/1
1/1
2/2
1/1
3/3
ETC..
我想删除单个数字的所有重复项并计算每个数字有多少个,但保持它们的原始顺序是这样的
4 2/2
2 3/3
3 1/1
我试过了
sort myfile.txt | uniq -c
但这会返回这样的输出,并且不会按照文件中第一个实例的顺序保留它
2 3/3
4 2/2
3 1/1
我也单独尝试了 uniq -c ,但这并没有删除所有重复项。我在最新的内核上运行 Arch Linux,所以我需要命令来解决这个问题。
抱歉,这太令人困惑了,但我们将不胜感激:)
解决方案
像这样的东西会起作用:
awk '
# This first line simply ensures that `order` is an array
BEGIN {delete order[0]}
! ($1 in seen) {order[length(order)+1] = $1}
{seen[$1]++}
END {for (i in order) print seen[order[i]], order[i]}
' data.txt
在这个脚本中,我们维护了两个关联数组(“字典”或其他语言中的“哈希”):
order
记录我们遇到新值的顺序,以及seen
记录我们看到特定值的次数
处理完数据后,我们遍历以按它们出现的顺序获取值,并在数组order
中查找它们的计数。seen
给定您的示例输入,这将产生:
4 2/2
2 3/3
3 1/1
推荐阅读
- python - 从 pandas 中的两个特征计算日期特征
- python - Python 如何比较 'int' 和 'float' 对象?
- haskell - 如何为 Shake 规则或操作编写“单元”测试?
- docker - Dockerfile, sbt-assembly - 是否可以在 dockerfile 中使用 sbt-assembly?
- c++ - 在OpenGL中将笛卡尔世界坐标转换为球面局部坐标
- google-analytics - 使用 gtag.js 与 analytics.js 相同的功能
- python - sparsity.PolynomialDecay() TensorFlow 2.0 基于幅度的权重修剪中的 initial_sparsity 参数
- symfony - 创建新 symfony 项目时出错,无法使用 bin/console
- angular - 模态控制器不会生成带有“加载块 N 失败”的模态
- jms - Logstash-Plug in-JMS 和 Weblogic 12.2.1 的问题