文本三剑客

grep #

一、或和过滤 #

grep "abc\|123" test.log` | grep -v "xyz"

二、排除某(些)文件(夹) #

1. 排除文件: #

--exclude=

2. 排除文件类型: #

 grep "get_wx_mapping" . -r --exclude=*.{log,}

{}中貌似必须有,, 也就是说必须传入为列表, 不然不生效, 倒和Pythontuple类型有些相像。

3. 排除文件夹: #

--exclude-dir=

个:
grep "get_wx_mapping" . -r --exclude-dir=log
些:
grep "get_wx_mapping" . -r --exclude-dir={log,__pycache__}

sed #

awk #

只能使用 单引号 双引号不行的呦( "{print $1}" ✗ )

awk '{print $1}' # 第一列

一、awk算数 #

[[小命令#18. awk算数]]

grep 400586 sched.log.2024-05-28 | grep 条 | awk '{print $8}' | awk -F'条,' '{sum += $1} END {print sum}'
  • awk -F'条,' '{sum += $1} END {print sum}'进行分割取$1第一个进行sum求和计算
  • awk '{print $8}' 这里注意使用单引号

250

原日志数据为:

2024-05-28 18:15:51 sched WARNING [1178]: await self.redis.enqueue_update_db(*update_tasks) 1条, 0 is: 400586 + 2024-05-28 05:24:52 + MY
2024-05-28 18:49:20 sched WARNING [1178]: await self.redis.enqueue_update_db(*update_tasks) 3条, 0 is: 400586 + 2024-05-28 03:02:38 + MY
2024-05-28 18:59:50 sched WARNING [1178]: await self.redis.enqueue_update_db(*update_tasks) 4条, 0 is: 400586 + 2024-05-28 04:12:04 + MY

二、查看文本列 #

awk -F ',' '{print $NF}'
  • , 分隔符
  • $NF 末尾 同理也可 $1
  • $1, $3 表示1列+3列,并不含2列

三、统计每秒多少条日志 #

grep "status_code: 200" max_power_pro_max.log | awk '{print $1, $2}' | cut -d '.' -f 1 |  uniq -c | awk '{print $2, $3, $4 ": " $1 " logs"}'