awk / sed / grep 文本处理命令生成提示词(日志统计、字段提取、批量替换,附逐段拆解)

要在命令行里快速处理日志或文本(统计接口调用次数、提取某列、按条件过滤、批量替换配置)时用:贴几行样例数据并说明想要的结果,得到可以直接运行的命令组合、逐段拆解,以及 macOS 与 Linux 的差异提醒。

NNathaniel bigo··原创首发·AI 辅助撰写
通用大模型 对话模型通用
你是一名命令行文本处理高手。请根据样例数据和需求,给出用 grep、sed、awk、sort、uniq、cut 等标准工具完成的命令。

- 系统:[系统](可选:Linux(GNU 工具)/macOS(BSD 工具)/Windows 的 Git Bash 或 WSL)
- 输入文件或数据来源:[如 access.log,约 2GB]
- 样例数据(5 到 10 行,敏感信息先替换):
  [粘贴样例]
- 想要的结果:[想要的结果](例:统计每个接口 5xx 的次数,按次数降序取前 10)
- 是否要修改原文件:[只输出结果/原地修改]

要求:
1. 先说明你如何理解样例的格式:分隔符是什么、要用的字段是第几列;格式有歧义时(例如字段里可能包含空格或引号)先指出。
2. 给出命令,放在代码块里。能一条管道完成的就一条;逻辑复杂时写成多行的 awk 程序,比硬凑一行更易读。
3. 逐段拆解:管道的每一段做了什么,awk 程序中每个部分的作用。
4. 用我的样例数据推演一遍,写出这几行样例对应的输出,方便我核对。
5. 原地修改文件时:先给出只预览不修改的命令;修改时保留备份;说明 macOS 与 Linux 上 sed 原地修改参数的差异。
6. 大文件性能:避免不必要的多次读取,必要时说明设置区域为 C 以加快处理,以及处理压缩日志的方式。
7. 如果这个需求用 Python 等脚本处理会明显更可靠(比如 CSV 字段中带逗号和引号、需要解析 JSON),直接建议换工具并给出替代方案。

高亮处换成你自己的内容:[系统]、[如 access.log,约 2GB]、[粘贴样例]、[想要的结果]、[只输出结果/原地修改]

ChatGPT Plus 充值

已被复制 0 次

使用说明

怎么填变量:[样例数据] 是最关键的输入,一定要贴真实的几行(把 IP、手机号等敏感信息替换掉),只用文字描述格式很容易让列号算错。[系统] 要写,因为 macOS 自带的 sed、awk 和 Linux 的 GNU 版本有不少参数不同。

常见坑:

  • 默认按空白分隔字段,但日志里的时间字段(如 [07/Oct/2026:10:00:00 +0800])或浏览器标识中含有空格,列号会错位。先确认格式再写命令。
  • macOS 上 sed -i 必须跟一个备份后缀参数(可以是空字符串),直接照搬 Linux 的写法会报错或产生奇怪的文件。
  • 用 awk 和 sed 处理 CSV:只要字段里可能出现带引号的逗号,就很容易出错,这时候换用专门的 CSV 工具或 Python 更稳。

追问技巧:命令跑出来结果不对时,把实际输出的前几行贴回去,问「为什么第 3 行的结果和预期不同」。

示例输出

示例,仅供参考(Nginx 默认格式访问日志:统计 5xx 最多的前 10 个接口)
bash
awk '$9 ~ /^5/ { split($7, p, "?"); cnt[p[1]]++ }
     END { for (u in cnt) print cnt[u], u }' access.log | sort -rn | head -10
部分作用
$9 ~ /^5/第 9 列是状态码,筛选以 5 开头的行
split($7, p, "?")第 7 列是请求路径,去掉问号后的查询参数
cnt[p[1]]++按路径计数
sort -rn \head -10

推演:样例中 /api/orders?page=2 返回 502 两次、/api/pay 返回 500 一次,输出为:

2 /api/orders
1 /api/pay

同款作品

用这条提示词做出来的作品;原作者会因此获得积分

做同款

还没有同款,来做第一个。

Nathaniel 的更多内容

同主题

同模型

0 条评论

登录 后参与评论

还没有评论,来抢沙发~