不区分大小写的计数重复行,通过选择具有最高重复的案例删除重复

apa*_*jja 8 sed awk text-processing

副本是不同大小写文本的组合。

我需要计算重复的数量(不区分大小写),然后我需要通过选择具有最高重复的案例来删除重复。

下面的例子:

hot chocolate
hot chocolate
hot chocolate
Hot Chocolate
Hot Chocolate
Hot Chocolate
Hot Chocolate
Hot Chocolate
Xicolatada
Xicolatada
Xicolatada
Xicolatada
XICOLATADA
XICOLATADA
Run Code Online (Sandbox Code Playgroud)

应该变成:

Hot Chocolate, 8
Xicolatada, 6
Run Code Online (Sandbox Code Playgroud)

这个问题类似于这一个,但我需要选择的情况下具有最高重复数和不区分大小写。

roc*_*cky 10

还有uniq --ignore-case --count | sort --numeric --reverse

sort | uniq -ic /tmp/foo.txt | sort -nr
      8 hot chocolate
      6 Xicolatada
Run Code Online (Sandbox Code Playgroud)

并切换放置逗号的顺序,将此管道添加到末尾:

... | sed -e 's/^ *\([0-9]*\) \(.*\)/\2, \1/'
Run Code Online (Sandbox Code Playgroud)

请参阅下面的第一条评论,了解为什么我们有领先的排序。

  • 好的,我在开始时添加了另一种类型来解释这一点。 (2认同)

fed*_*qui 5

我会tolower()用来使所有项目小写。然后是将它们存储在数组中a[]然后打印结果的问题:

$ awk '{a[tolower($0)]++} END {for (i in a) print i, a[i]}' file
xicolatada 6
hot chocolate 8
Run Code Online (Sandbox Code Playgroud)

要以逗号分隔格式输出,请添加-v OFS=,.