grep #
一、或和过滤 #
grep "abc\|123" test.log` | grep -v "xyz"
二、排除某(些)文件(夹) #
1. 排除文件: #
--exclude=
2. 排除文件类型: #
grep "get_wx_mapping" . -r --exclude=*.{log,}
{}
中貌似必须有,
, 也就是说必须传入为列表, 不然不生效, 倒和Python
的tuple
类型有些相像。
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列
三、统计每秒多少条日志 #
cut -d ‘.’ 很重要, 因为uniq -c 会把带符号的相同数据作为分开统计就很迷惑 tr -d ‘,’ 也可以用
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"}'
cut 命令笔记 #
cut
命令用于从每行文本中提取文本列。
- 基本用法:
cut OPTION... [FILE]...
- 选项:
-d CHAR
:指定字段分隔符,默认是制表符。-f FIELDS
:指定要提取的字段,可以是单个数字或一系列数字(例如,1,3,5
)。
- 示例:
- 提取文件
data.txt
中的第一和第三列(假设字段由逗号分隔):
- 提取文件
cut -d ',' -f 1,3 data.txt
提取 IP 地址的第一个部分:
echo "192.168.1.1" | cut -d '.' -f 1
tr 命令笔记 #
tr
命令用于转换或删除文本流中的字符。
- 基本用法:
tr [OPTION]... SET1 [SET2]
- 选项:
-d
:删除 SET1 中指定的所有字符。-s
:压缩连续的 SET1 中的字符为一个字符。
- 示例:
- 删除文本中的所有逗号:
echo "1,2,3,4,5" | tr -d ','
将文本中的小写字母转换为大写:
echo "hello world" | tr 'a-z' 'A-Z'
四、sort + uniq #
uniq
命令的工作原理是只聚合相邻的重复行。
所以如果要统计总频次的话就需要先使用sort
进行排序
示例 #
apple
banana
apple
cat fruits.txt | uniq -c
1 apple
1 banana
1 apple
cat fruits.txt | sort | uniq -c
2 apple
1 banana