我有一个像这样的文件
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
选项忽略大小写差异。