Bash - 如何在以相同字母开头的行后附加换行符?

Bash - how to append a newline after lines starting with the same letter?

我有一个文件,比方说,下面几行:

alibi
all
bone
chair
clever
cup
curse
dog
donut

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

alibi
all

bone

chair
clever
cup
curse

dog
donut

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

我在 Windows Cygwin 环境中工作。

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

#!/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

我想我找到了一个单行 awk 命令来满足我的需求:

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

此答案改编自 http://www.cis.uni-muenchen.de/kurse/pmaier/Korpus/DataIntensiveLinguistics/node40.html.

的单行本