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.
的单行本
我有一个文件,比方说,下面几行:
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.
的单行本