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

Bash 排序-在排序列表中以相同字母开头的每个组前面加上任意字符串,bash,shell,sorting,awk,Bash,Shell,Sorting,Awk,给出以下列表(输入): 我想要以下输出: == A == apple == B == banana blueberry == M == mango melon 这是否可以在shell脚本中实现,或者使用awk或其他一些文本处理实用程序 其他假设: 在这种情况下,假设我们将管道输入到awk,如下所示: cat输入| awk… (可选)文本流包含非标准字符(非ASCII),如日语、阿拉伯语,还包含数字和特殊符号。也许这些可以在它们自己的类别中组合在一起(需要额外的逻辑) 您可以尝试此awk

给出以下列表(输入):

我想要以下输出:

== A ==
apple

== B ==
banana
blueberry

== M ==
mango
melon
这是否可以在shell脚本中实现,或者使用
awk
或其他一些文本处理实用程序

其他假设

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

    cat输入| awk…

  • (可选)文本流包含非标准字符(非ASCII),如日语、阿拉伯语,还包含数字和特殊符号。也许这些可以在它们自己的类别中组合在一起(需要额外的逻辑)


  • 您可以尝试此
    awk

    awk '{s = substr($0, 1, 1)} 
        s != p {print "===", toupper(s), "==="} {p = s} 1' file
    
    awk
    详细信息:

    • {s=substr($0,1,1)}
      :将每个记录的第一个字符保存在变量
      s
    • s!=p
      :如果
      s!=p
      p
      是变量,用于保存上一条记录的第一个字符)
    • {print“==”,toupper(s),“==”}
      :用大写字母打印记录分隔符
      s
    • {p=s}
      :将
      s
      保存在
      p
    • 1
      :打印每条记录

    可能,是的。。你试过什么了吗?我不熟悉将逻辑写入
    awk
    ,你能举个例子说明你的建议吗?其他工具也可以,不必是
    awk
    。我已经检查了
    人工排序
    ,但它似乎不受支持。谢谢,可以在一行中编写它并假设我们正在从标准输出流传输到awk吗?我正试图让它工作,但有一些问题..请澄清
    没有按预期工作
    。它使用的数据与您在附件输出中看到的数据相同。很抱歉,问题完全在我这边。在整个处理过程中,我一直在从grep强制使用颜色,所以我必须去掉ANSI转义(颜色)代码才能使其正常工作<代码>sed-r“s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?[mGK]//g”谢谢您的帮助,仍然需要进行一些处理,但现在它已经按预期工作了!接受您的答案。@PetrusK。当您使用awk时,您不需要grep,并且您当然不需要在将grep输出传递给awk之前向sed添加一个修改grep输出的调用!
    sed-r's/foo//g'| awk'{bar}'
    =
    awk'{gsub(/foo/,,“”);bar}’
    awk '{s = substr($0, 1, 1)} 
        s != p {print "===", toupper(s), "==="} {p = s} 1' file
    
    === A ===
    apple
    === B ===
    banana
    blueberry
    === M ===
    mango
    melon