【问题标题】:Finding punctuation and counting the number of each from the Unix Command line从 Unix 命令行中查找标点符号并计算每个标点符号的数量
【发布时间】:2011-12-21 15:40:33
【问题描述】:

我想找到我的.txt 文件中使用的所有标点符号,并计算每个标点符号出现的次数。我该怎么做?我是新手,但我正在努力学习!这不是家庭作业!我现在一直在研究grepsed

【问题讨论】:

    标签: unix command-line sed tr


    【解决方案1】:
    $ perl -CSD -nE '$seen{$1}++ while /(\pP)/g; END { say "$_ $seen{$_}" for keys %seen }'  sometextfile.utf8
    

    $ perl -CSD -nE '$seen{$1}++ while /(\pP)/g; END { say "$_ $seen{$_}" for keys %seen }' programming_perl_4th_edition.pod | sort -k2rn
    , 21761
    . 19578
    ; 10986
    ( 8856
    ) 8853
    - 7606
    : 7420
    " 7300
    _ 5305
    ’ 4906
    / 4528
    { 2966
    } 2947
    \ 2258
    @ 2121
    # 2070
    * 1991
    ' 1715
    “ 1406
    ” 1404
    [ 1007
    ] 1003
    % 881
    ! 838
    ? 824
    & 555
    — 330
    ‑ 72
    – 41
    ‹ 16
    › 16
    ‐ 10
    ⁂ 10
    … 8
    · 3
    「 2
    」 2
    « 1
    » 1
    ‒ 1
    ― 1
    ‘ 1
    • 1
    ‥ 1
    ⁃ 1
    ・ 1
    

    如果您不仅需要标点符号,还需要标点符号和符号,请在您的模式中使用[\pP\pS]。不过,无论您做什么,都不要使用旧式 POSIX 类。

    【讨论】:

      【解决方案2】:

      使用 sed、tr、sort 和 uniq(而不是 perl):

      sed -E 's/[^[:punct:]]//g;s/(.)/\1x/g' myfile.txt | tr 'x' '\n' | sort | uniq -c
      

      我是这样做的(sed + tr),所以它可以在 unix 和 mac 上运行。 Mac 需要在 sed 命令中嵌入换行符,但 unix 可以使用 \n。这样它就可以在任何地方工作。

      这将适用于非 mac Unix:

      sed -E 's/[^[:punct:]]//g;s/(.)/\1\n/g' myfile.txt | sort | uniq -c
      

      【讨论】:

      • 这使用了破旧的、请包含符号-too-but-only-if-they-are-ASCII、老式 POSIX 定义的“标点符号”。今天没有任何意义。不要使用 POSIX 字符类。使用 Unicode 属性。 POSIX 属性很烂。
      • 如果你认为 Mac 不是 Unix,那你就没有仔细观察。
      • @tchrist:您是在告诉我们 POSIX 字符类被错误实现(因此,如果您使用 Unicode/UTF8 代码集,那么标点符号类管理不善)?显然,如果告诉工具使用单字节代码集,那么向它们提供多字节数据会产生误导性结果。但如果语言环境信息显示“UTF8”,那么[[:punct:]] 表示“UTF8 中的标点符号”而不是“某些 SBCS 中的标点符号”,可以肯定吗?您能确定问题在 POSIX 标准中指定的位置吗?
      • §3.89§7.3.1 部分似乎适用。在 POSIX 语言环境中,它们可能非常有限;在其他语言环境中,我没有看到您声称的限制已指定。实现可能完全是另一个问题......它们很容易有缺陷。
      • 什么是“非 Unicode 标点符号的 ASCII 符号”?是像'@'和'#'这样的东西吗?不可能这样;你的答案包括他们......还是故意的? (可能不是;您显示的内容有\pP 而不是[\pP\pS]。)这也可能归结为提问者想要被视为标点符号的内容 - 以及“标准的美妙之处在于有这么多可供选择”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 2021-03-31
      • 1970-01-01
      相关资源
      最近更新 更多