Linux命令-awk

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打印mn行:

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#

这打印的是13(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

猜你喜欢

转载自blog.csdn.net/zhaole524/article/details/52834426