You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash脚本实现指定结构化文本的格式转换?

使用Bash脚本实现结构化文本格式转换

输入示例

"4-QUEIJOS": Mucarela Provolone Catupiry Ricota Oregano
"A-MODA": Mucarela Presunto Calabresa Bacon Tomate Milho Oregano
"ALHO-E-OLEO": Mucarela Alho oleo Oregano
"PEITO-DE-PERU-ESPECIAL": Mucarela Peito-de-Peru Catupiry Oregano

输出示例

"4-QUEIJOS": ["mucarela", "provolone", "catupiry", "ricota", "oregano"],
"A-MODA": ["mucarela", "presunto", "calabresa", "bacon", "tomate", "milho", "oregano"],
"ALHO-E-OLEO": ["mucarela", "alho", "oleo", "oregano"],
"PEITO-DE-PERU-ESPECIAL": ["mucarela", "peito-de-peru", "catupiry", "oregano"]

转换要求

  • 将冒号(:)后的单词转为小写
  • 在这些单词间添加逗号
  • 用方括号([])包裹这些单词
  • 除最后一行外,每行末尾添加逗号

解决方案

可以用awk命令高效实现文本格式转换,以下是两种使用方式:

方式1:处理文件

假设输入文本保存在input.txt中,执行命令:

awk -F': ' 'BEGIN { getline < ARGV[1]; NR_total = NR; close(ARGV[1]); ARGV[1]="-" } {
    printf "%s: [", $1;
    for (i=2; i<=NF; i++) {
        if (i>2) printf ", ";
        printf "\"%s\"", tolower($i);
    }
    printf "]%s\n", NR != NR_total ? "," : ""
}' input.txt

方式2:处理标准输入

直接输入文本后按Ctrl+D结束输入,执行命令:

awk -F': ' 'BEGIN { NR_total = ARGC-1 } {
    printf "%s: [", $1;
    for (i=2; i<=NF; i++) {
        if (i>2) printf ", ";
        printf "\"%s\"", tolower($i);
    }
    printf "]%s\n", NR != NR_total ? "," : ""
}' -

命令解释

  1. -F': ':设置字段分隔符为冒号加空格,将每行拆分为标题($1)和食材列表($2到$NF)两部分
  2. BEGIN块:提前获取总行数,用于判断是否为最后一行
  3. 循环处理食材列表:
    • tolower($i):将每个单词转为小写
    • 除第一个食材外,前面添加逗号分隔
    • 用双引号包裹每个单词
  4. printf "]%s\n", NR != NR_total ? "," : "":闭合方括号,非最后一行末尾加逗号,最后一行不加

内容的提问来源于stack exchange,提问作者Bruno Peixoto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:15:21