【问题标题】:Compare case insensitive strings then count duplicates比较不区分大小写的字符串,然后计算重复项
【发布时间】:2015-06-26 17:15:28
【问题描述】:

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

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

【问题讨论】:

  • 你的预期输出是什么?
  • tr a-z A-Z before awk 可能是一个解决方案

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


【解决方案1】:

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

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

但是,如果您在问题中包含您的预期输出,那么我可以给您更准确的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 2014-06-20
    • 2011-06-22
    • 1970-01-01
    • 2013-07-22
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多