shell之awk(一)内置变量

$0     打印行所有信息

$1~$n      打印行的第1到n个字段信息
NF      处理行的字段个数
NR      处理行的行号
FNR      多文件处理时,每个文件单独记录行号
FS      字段分隔符,不指定时默认以空格额或者tab键分割
RS      行分隔符,不指定时以回车换行分割
OFS      输出字段分隔符
ORS      输出行分隔符
FILENAME    处理文件的文件名
ARGC      命令行参数个数
AEGV      命令行参数数组

命令演示

% cat test.log    //先查看测试文件
php|java golang awk nginx
wangteng|shandong dezhou nginx
beijing|tianjin hebei mysql
% awk '{print $0}’ test.log  //打印所有行
php|java golang awk nginx
wangteng|shandong dezhou nginx
beijing|tianjin hebei mysql
 % awk '{print $1}’ test.log  //默认以空格为分割符,打印第一列
php|java
wangteng|shandong
beijing|tianjin
% awk 'BEGIN{FS="|"}{print $1}’ test.log  //以|作为分隔符,打印第一列
php
wangteng
beijing
% awk '{print $2,$3}’ test.log  //默认以空格为分隔符,打印第2,3列
golang awk
dezhou nginx
hebei mysql
% awk '{print NF}’ test.log  //默认以空格为分隔符,打印列数
4
3
3
% awk '{print NR}’ test.log  //打印行数
1
2
3
% awk '{print FNR}' test.log access.log  //打印一个或者多个文件,分别列出每个文件的行号,计算行数
1
2
3
4
1
2
3
4
5
5
6
7
% cat test.log   //新的测试文件
php|java|golang|python--Go--lua|mysql--es
% awk 'BEGIN{RS="--"}{print $0}’ test.log  //以—作为分隔符打印行内容
php|java|golang|python
Go
lua|mysql
es
% awk 'BEGIN{RS="--";FS="|"}{print $1}’ test.log //以—作为分隔符,然后以|作为分隔符切割隔第1列
php
Go
lua
es
% awk 'BEGIN{RS="--";FS="|";ORS="&"}{print $1}’ test.log //切割后拼接
php&Go&lua&es
&%
% awk 'BEGIN{RS="--";FS="|";ORS="&"}{print $1 $2}' test.log
phpjava&Go&luamysql&es
&%
% awk 'BEGIN{FS=":"}/root/{print $0}' /etc/passwd. //打印包括root的所有行
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_cvmsroot:*:212:212:CVMS Root:/var/empty:/usr/bin/false

 

posted @ 2018-02-27 00:58  温柔的风  阅读(132)  评论(0编辑  收藏  举报