【问题标题】:combine like terms in bash在 bash 中组合类似的术语
【发布时间】:2015-04-21 03:31:03
【问题描述】:

我有一个文本文件中的域名列表,它们在电子邮件文件集合中出现了很多次。例如:

 598 aol.com
  1 aOL.COM
  4 Aol.com
  1 AOl.com
  6 AOL.com
 39 AOL.COM

有 598 封电子邮件发送到 aol.com,1 封发送到 aOL.COM,依此类推。我想知道 bash 中是否有一种方法可以将 aol.com 和 aOL.COM 以及所有其他别名结合起来,因为它们实际上是同一个东西。任何帮助将不胜感激!

这是产生该输出的代码行:

grep -E -o -r "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" $ARCHIVE | sed 's/.*@//' | sort | uniq -c > temp2

【问题讨论】:

    标签: bash sorting grep uniq


    【解决方案1】:

    -i (--ignore-case) 标志添加到单行代码中的uniq 命令:

    grep -E -o -r "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" $ARCHIVE \
        | sed 's/.*@//' \
        | sort \
        | uniq -ic > temp2
    

    来自uniq 手册页:

    -i
    --ignore-case
        Ignore differences in case when comparing lines.
    

    【讨论】:

    • @Albert,这实际上更容易,我会推荐这个,但要理解它为什么有效。
    【解决方案2】:

    我建议更改生成此代码的程序,首先将所有内容设为小写 (Converting string to lower case in Bash shell scripting),然后尝试排序。

    事后做这件事只会让你的生活更艰难。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 2012-04-14
      • 2016-11-21
      相关资源
      最近更新 更多