Sorting 附加到行而不删除重复项的特定字段的频率计数
试图找出如何在不删除重复出现的情况下将频率追加或添加到文件中的每一行(uniq可以帮我做到这一点) 因此,如果输入文件为:Sorting 附加到行而不删除重复项的特定字段的频率计数,sorting,frequency,uniq,Sorting,Frequency,Uniq,试图找出如何在不删除重复出现的情况下将频率追加或添加到文件中的每一行(uniq可以帮我做到这一点) 因此,如果输入文件为: mango mango banana apple watermelon banana 我需要输出: mango 2 mango 2 banana 2 apple 1 watermelon 1 banana 2 我看到的所有解决方案都删除了重复项。换句话说,我不想要的是: mango 2 banana 2 apple 1 watermelon 1 基本上,你不可能一次就
mango
mango
banana
apple
watermelon
banana
我需要输出:
mango 2
mango 2
banana 2
apple 1
watermelon 1
banana 2
我看到的所有解决方案都删除了重复项。换句话说,我不想要的是:
mango 2
banana 2
apple 1
watermelon 1
基本上,你不可能一次就把所有的东西都记住。如果这是您想要做的,那么使用python/perl/awk/随便什么。算法非常简单 让我们使用标准的Unix工具来完成它。这有点麻烦,可以改进,但应该可以做到:
$ sort input | uniq -c > input.count
$ nl input | sort -k 2 > input.line
$ join -1 2 -2 2 input.line input.count | sort -k 2 | awk '{print $1 " " $3}
第一步是计算给定单词的出现次数
正如你所说的,你不能重复和保持在线订购。所以我们必须解决这个问题。第二步在行号之前加上前缀,我们稍后将使用该行号来解决订购问题
在最后一步中,我们将两个临时文件连接到原始单词上,第二列包含我们在此键上排序的原始行号排序,并将其从最终输出中删除。在输出文件中保持相同的行号排序是否重要?谢谢。您的引擎可以工作,只是现在尝试修改,以便它可以用于空格/制表符以外的字段分隔符(或者,我将构建一个变通方法,将原始输入文件中的所有空格转换为一些非空格字符,如“#”,然后在最后重新转换回空格)