给定以下列表(输入(:
apple
banana
blueberry
mango
melon
我想要以下输出:
== A ==
apple
== B ==
banana
blueberry
== M ==
mango
melon
这可以在shell脚本中实现吗,也许可以使用awk
或其他文本处理实用程序?
其他假设:
在这种情况下,假设我们将输入管道传输到
awk
,如下所示:cat input | awk ...
(可选(文本流包含非标准字符(非ASCII(,如日语、阿拉伯语,还包含数字和特殊符号。也许这些可以在它们自己的类别中组合在一起(需要额外的逻辑(。
您可以尝试此awk
:
awk '{s = substr($0, 1, 1)}
s != p {print "===", toupper(s), "==="} {p = s} 1' file
=== A ===
apple
=== B ===
banana
blueberry
=== M ===
mango
melon
awk
详细信息:
{s = substr($0, 1, 1)}
:将每条记录的第一个字符保存在变量s
中s != p
:如果s != p
(p
是变量,用于保存前一条记录的第一个字符({print "===", toupper(s), "==="}
:使用大写s
打印记录分隔符{p = s}
:在p
中保存s
1
:打印每条记录