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

Bash-如何在以相同字母开头的行之后追加换行符?,bash,cygwin,newline,alphabetical,Bash,Cygwin,Newline,Alphabetical,我有一个文件,比如说,有以下几行: alibi all bone chair clever cup curse dog donut 我想在以同一个字母开头的最后一个单词后面加一个换行符;也就是说,我希望输出为: alibi all bone chair clever cup curse dog donut 有什么办法吗?我不是专家,所以我甚至不知道从哪里开始。我也喜欢一行 我在Windows环境Cygwin中工作。逐行阅读文件,记住单词的第一个字符,并与下一个单词的第一个字符进行比较

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

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
#/bin/bash
上一页=“”
边读边读;做
char=${word:0:1}
如果[[$prev&&$prev!=$char]];然后
回声
fi
prev=$char
回显“$word”
完成<输入文件

我想我找到了一个单行的
awk
命令,它完成了我正在寻找的功能:

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

此答案改编自。

感谢您的帮助,但我想我找到了一个较短的解决方案!