行操作
连续 N 行
要求:选择该文件的第 5~15 行的内容。
$ cat test
1
2
3
4
5bbb
6xxxxxxxxxx
7123i4i44
8
9
10
11
12
13ffffff
14fffff
15bbbbbb
16
17nnnnnn
grep
如果已知第 5 行或第 15 行的内容,则可以借助 -A 或 -B 参数来向后或向前选择行。
$ grep 15bbbbbb -B 10 test
-B :before
提取关键字所在行,以及之 前 的 10 行。共计 10+1=11 行。
$ grep 5bbb -A 10 test
同理 -A 10 则表示提取关键字所在行,以及之 后 的 10 行。
sed
sed 最适合进行单纯的行操作。
$ sed -n '5,15p' test
awk
先通过定义条件来选择行,再输出。
$ awk '{if(NR<16 && NR>4) print $0}' test
NR :行号
日志分析
统计 apache 的 access.log 中访问量最多的前 5 个 ip 地址
access.log 通常格式如下:
127.0.0.1 - peter [9/Feb/2017:10:34:12 -0700] "GET /sample-image.png HTTP/2" 200 1479
因此,仅处理第 1 字段。
$ sudo cat /var/log/httpd/test-access.log \
| awk '{print $1}' \
| sort \
| uniq -c \
| sort -rn \
| head -5