sort-在排序列表中以相同字母开头的每个组前面加一个任意字符串



给定以下列表(输入(:

apple
banana
blueberry
mango
melon

我想要以下输出:

== A ==
apple
== B ==
banana
blueberry
== M ==
mango
melon

这可以在shell脚本中实现吗,也许可以使用awk或其他文本处理实用程序?

其他假设

  1. 在这种情况下,假设我们将输入管道传输到awk,如下所示:

    cat input | awk ...

  2. (可选(文本流包含非标准字符(非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:打印每条记录

最新更新