计算每行重复的次数,以防大小写不敏感的方式

计算每行重复的次数,以防大小写不敏感的方式

我有一个像这样的文件

a
A
b
c

我想以不区分大小写的方式打印每行重复的次数。我发现下面的命令很有用:

tr A-Z a-z | uniq -c | sed -e 's/^ *//' -e 's/ *$//'

但如果文件的格式为 ,则失败A \n a。这给出了2 a.但预期输出是2 A

我怎样才能做到这一点?

答案1

首先,您必须sort在使用之前使用命令,uniq -c因为如果在输入等其他字符之后有另一个重复字符,则该命令将失败:

a
A
b
c
A
a
a

第二个问题是你得到错误的结果,因为你将所有大写字母转换为小写字母,这会导致你得到小写的结果。

另外,您不需要's/ *$//'sed 的一部分,因为您的输出行尾没有空格。

您应该尝试使用修改后的命令,如下所示:

tr a-z A-Z <file |sort | uniq -c | sed 's/^ *//'

或者更短的尝试:

sort -r file |uniq -ci

sort-r选项将大写字符排序为第一行。 and withuniq及其-i选项忽略大小写差异。

相关内容