在ubuntu下:
Alt + F2 -> gnome-terminal -> sudo su -> 输入密码 切换到root
Awk常用的指令使用:
1、输出基本字符串
root@ubuntu:/etc/rc1.d# last -5 | grep lanyyyy | awk '{print $1}'
lanyyyy
lanyyyy
awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键"或"[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推。
Print可以不带参数,表示输出当前行。
2、指定分隔符:
root@ubuntu:/etc/rc1.d# last -5 | grep lanyyyy | awk -F ':' '{print $1}'
lanyyyy pts/0
lanyyyy
-指定分隔符是--,并输出第一个变量。
3、指定开始和末尾执行:
root@ubuntu:/home/lanyyyy# last -5 | grep lanyyyy | awk 'BEGIN {print "name"} {print $1} END {print "over"}'
name
lanyyyy
lanyyyy
Over
执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。
4、找寻包含关键字符串的命令:
root@ubuntu:/home/lanyyyy# awk -F: '/lanyyyy/' last.txt
lanyyyy pts/0 :0 Sun Oct 16 08:24 still logged in
lanyyyy pts/0 :0 Sun Oct 16 08:24 - 08:24 (00:00)
这里单引号内部的两个反斜杠是必须的,表示通过正则表达式进行匹配。
5、awk进行赋值并输出,需要结合echo:
root@ubuntu:/home/lanyyyy# echo | awk '{var1="v1";var2="v2"; print var1,var2;}'
v1 v2
6、awk打印m到n行:
root@ubuntu:/home/lanyyyy# last | awk 'NR==1,NR==3'
lanyyyy pts/0 :0 Sun Oct 16 08:24 still logged in
lanyyyy pts/0 :0 Sun Oct 16 08:24 - 08:24 (00:00)
root@ubuntu:/home/lanyyyy#
这打印的是1到3行(1\2\3)内容。
7、awk将分隔符进行替换,并输出:
root@ubuntu:/home/lanyyyy# last -2 | grep lanyyyy | awk 'BEGIN {OFS="--"} {print $1,$2,$3}'
lanyyyy--pts/0--:0
lanyyyy--pts/0--:0
root@ubuntu:/home/lanyyyy#
OFS值默认为空格,这里将空格改为--,并且输出。
8、输出变量分割的个数:
root@ubuntu:/home/lanyyyy# last -2 | grep lanyyyy | awk '{print NF}'10
10
10
这里以空格为分隔符,输出分割字段的个数,即内置变量NF。
9、给每一行加上行数:
root@ubuntu:/home/lanyyyy# last | grep lanyyyy | awk '{print FNR,$1}'
1 lanyyyy
2 lanyyyy
3 lanyyyy
4 lanyyyy
10、给每一行加上编号:
root@ubuntu:/home/lanyyyy# last | grep lanyyyy | awk 'NF{$0=++a ":" $0}; {print }'
1:lanyyyy pts/13 :0 Mon Oct 17 08:54 still logged in
2:lanyyyy :0 :0 Mon Oct 17 08:53 still logged in
3:lanyyyy pts/0 :0 Sun Oct 16 08:24 - down (01:08)
4:lanyyyy pts/0 :0 Sun Oct 16 08:24 - 08:24 (00:00)
11、计算单词的总数:
root@ubuntu:/home/lanyyyy# last | grep lanyyyy | awk '{ total = total + NF }; END {print total}'
40
Awk条件运算符:
12、~或~!:首域匹配或不匹配lanyyyy
root@ubuntu:/home/lanyyyy# last | grep lanyyyy | awk '{if($1~/lanyyy/) print}'
lanyyyy pts/13 :0 Mon Oct 17 08:54 still logged in
lanyyyy :0 :0 Mon Oct 17 08:53 still logged in
lanyyyy pts/0 :0 Sun Oct 16 08:24 - down (01:08)
lanyyyy pts/0 :0 Sun Oct 16 08:24 - 08:24 (00:00)
相关文档资料:
awk数组使用:http://www.cnblogs.com/chengmo/archive/2010/10/08/1846190.html
awk命令大全:http://man.linuxde.net/awk
awk命令范例:http://blog.chinaunix.net/uid-25940826-id-3431011.html