行操作

连续 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