管道把小程序连成句子
一句话总结
grep 用于筛选,sed 用于修改,awk 用于字段处理和统计。管道把独立进程的 stdout 与 stdin 连接起来,可流式处理大文件。
统计高频项时要先排序再计数。默认管道退出码只来自最后一个命令,脚本应启用 pipefail 发现前段失败。处理大日志时应先按时间裁剪、只提取必要列,尽早减少后续排序的数据量;只找一个结果就立即停止。
关联数组可避免对原始全部行排序,C locale 可加速字节比较,压缩日志应直接流式读取,避免诊断本身耗尽磁盘。
原文中的命令与标识符
... | sort | uniq -c | sort -rn | head
uniq -c
sort
sort -rn
curl ... | jq ... | wc -l
set -o pipefail
cat f | grep p
grep p f
sort | uniq
sort -u
cat f | wc -l
wc -l < f
echo "$s" | cut -d. -f1
${s%%.*}
awk '$9 ~ /^5[0-9][0-9]$/ {print $7}' access.log | sort | uniq -c | sort -rn | head -10
awk '{t++; if ($5 != 200) e++} END {printf "%.1f\n", e*100/t}'
sed -n '/03:00/,/03:10/p'
grep -m 1
awk '{print $7}'
sort
sort
awk
awk '{c[$7]++} END {for (k in c) print c[k], k}' | sort -rn | head
LC_ALL=C
sort
grep
zgrep
zcat
/opt/lab/data/app.log