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

如何用脚本从文本文件提取指定字段并排序写入新文件

解决方案

处理JSON格式的数据,优先用jq工具,比正则更稳定可靠,不会因为JSON结构的小变化(比如键值顺序调换、换行)失效。直接执行以下命令即可完成需求:

jq -r '.[] | [.key, .project, .author, .type] | @tsv' myfile.txt | sed 's/\t/    /g' > mynewfile.txt

命令说明:

  • -r:让jq输出原始字符串,不会给字段套JSON引号
  • .[]:遍历输入JSON数组中的每一条数据(如果你的扫描数据是包裹在数组里的,这一步会逐个处理每条记录)
  • [.key, .project, .author, .type]:从每条记录里提取指定的四个字段,组成一个数组
  • @tsv:把数组转换成制表符分隔的字符串,保证字段对齐
  • sed 's/\t/ /g':将制表符替换成四个空格,匹配你想要的输出格式(如果允许用制表符分隔,这一步可以省略)

如果你的JSON结构不是顶层数组(比如数据嵌套在某个字段下,比如.results[]),只需要修改jq的路径即可,比如改成:

jq -r '.results[] | [.key, .project, .author, .type] | @tsv' myfile.txt | sed 's/\t/    /g' > mynewfile.txt

无jq环境的替代方案

如果系统里没装jq,可以用awk结合正则处理(仅适合JSON格式非常规整的场景,比如键值对单行排列、顺序固定):

awk -F'"' '{
    key = project = author = type = ""
    for(i=1; i<=NF; i++){
        if($i == "key") key = $(i+2)
        else if($i == "project") project = $(i+2)
        else if($i == "author") author = $(i+2)
        else if($i == "type") type = $(i+2)
    }
    printf "%-20s %-20s %-25s %s\n", key, project, author, type
}' myfile.txt > mynewfile.txt

这个脚本用双引号分割每行内容,逐个匹配目标键名,提取对应的值,最后用printf格式化输出,保证字段对齐。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:04:09