文本三剑客

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列

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

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