比较不区分大小写的字符串然后计算重复项

时间:2015-04-20 05:47:51

标签: bash sorting awk text-files case-insensitive

所以我有一个看起来像这样的文本文件:(第一列是重复次数,第二列是数据)

27 amalyais
17 knc154
14 formulaoneboy
13 mathchallenged31
9 GooGooo1234
8 rkinder
7 tony
7 rammnatt2003

我的代码读取文本文件,删除任何重复项,并计算数据重复的时间。但是,有些数据是大写的,而其他数据是小写的。如果出现这种情况,我的代码现在打印出类似的东西:

27 amalyais
12 AMALYAIS
9 Amalyais

有没有办法解决这个问题? 这是我的awk代码。我是awk的新手所以我仍然在努力解决很多问题:(temp1是带有重复数据的文本文件,temp2的输出如上所述)

sort -k2 < temp1 |
awk '!z[$1]++{a[$1]=$0;} END {for (i in a) print z[i], a[i]}' |
sort -rn -k1 > temp2

1 个答案:

答案 0 :(得分:2)

awk命令中,您可以在执行任何逻辑之前将整个记录转换为小写:

awk '{$0=tolower($0)} !z[$2]++{a[$2]=$0;} END {for (i in a) print z[i], a[i]}'

但是,如果您将预期的输出包含在内,那么我可以为您提供更准确的答案。