【问题标题】:Bash - how to append a newline after lines starting with the same letter?Bash - 如何在以相同字母开头的行之后添加换行符?
【发布时间】:2016-02-17 13:06:37
【问题描述】:

我有一个文件,比如说,以下几行:

alibi
all
bone
chair
clever
cup
curse
dog
donut

我想在以相同字母开头的最后一个单词后添加一个换行符;也就是说,我希望输出为:

alibi
all

bone

chair
clever
cup
curse

dog
donut

有什么办法吗?我不是专家,所以我什至不知道从哪里开始。我也更喜欢单线。

我在 Windows 环境 Cygwin 中工作。

【问题讨论】:

    标签: bash cygwin newline alphabetical


    【解决方案1】:

    逐行读取文件,记住单词的第一个字符,与下一个字符的第一个字符进行比较。

    #!/bin/bash
    
    prev=''
    while read word ; do
        char=${word:0:1}
        if [[ $prev && $prev != $char ]] ; then
            echo
        fi
        prev=$char
        echo "$word"
    done < input-file
    

    【讨论】:

    • 感谢您的帮助,但我想我找到了更短的解决方案!
    【解决方案2】:

    我想我找到了一个单行的awk 命令,它可以满足我的需求:

    awk '{if ( substr ($0, 0, 1) != prev) print "\n"$0; else print $0; prev = substr ($0, 0, 1)}' 
    

    此答案改编自 http://www.cis.uni-muenchen.de/kurse/pmaier/Korpus/DataIntensiveLinguistics/node40.html 的一篇文章。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-23
      • 2011-03-18
      • 2023-01-29
      • 1970-01-01
      • 2017-12-17
      • 2021-11-28
      • 1970-01-01
      相关资源
      最近更新 更多