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

时间:2016-02-17 13:06:37

标签: bash cygwin newline alphabetical

我有一个文件,让我们说,以下几行:

alibi
all
bone
chair
clever
cup
curse
dog
donut

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

alibi
all

bone

chair
clever
cup
curse

dog
donut

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

我在Windows环境Cygwin工作。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我想我找到了一个单行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的单行。