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 條評論

登入 後參與評論

還沒有評論,來搶沙發~