linux awk 简单使用

AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。

命令格式:

awk [-F  field-separator]  '/pattern/{action}'  [inputfilename]
1、-F 用于指定域分隔符(默认域分隔符是"空白键" 或 "[tab]键")
1、pattern 表示 AWK 在数据中查找的内容,支持正则表达式,用斜杠"/"括起来。
2、action是在找到匹配内容时所执行的一系列命令。
3、pattern和action都是可选的,如果不指定pattern,则action应用到全部记录,如果不指定action,则输出整行的的内容。


awk工作流程:
读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符(默认域分隔符是"空白键" 或 "[tab]键",可以通过-F指定其他分隔符)划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。

使用示例:

-- 显示最近登录的5个账号信息(全部信息)
last -n 5
root     pts/0        192.168.1.61     Sat Nov  7 22:35   still logged in  
root     pts/5        10.70.2.157      Fri Nov  6 15:48 - 17:33  (01:44)   
root     pts/4        10.4.11.38       Fri Nov  6 15:31 - 18:02  (02:31)   
root     pts/0        10.70.2.157      Fri Nov  6 10:06 - 17:33  (07:27)   
root     pts/4        10.70.2.157      Fri Nov  6 10:02 - 10:05  (00:03)

-- 显示最近登录的5个账号信息(只保留账号和IP)
last -n 5 | awk  '{print $1"\t"$3}'
root 192.168.1.61
root 10.70.2.157
root 10.4.11.38
root 10.70.2.157
root 10.70.2.157

-- 显示/etc/passwd文件内容

cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

-- 只显示/etc/passwd文件中的账号(-F指定域分隔符为':'。)
cat /etc/passwd |awk  -F ':'  '{print $1}' 
root
daemon
bin
sys
sync
games
man

-- 获取tomcat进程号
ps -ef|grep "tomcat"|grep -v "grep"|awk '{print $2}'|tail -1

-- 搜索/etc/passwd包含有root关键字的所有行
#awk -F: '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
本例是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。


--搜索/etc/passwd中,以root开头的行:
awk -F: '/^root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash


-- 搜索/etc/passwd有root关键字的所有行,但是只输出对应的shell

# awk -F: '/root/{print $7}' /etc/passwd            
/bin/bash
本例同时指定了pattern和action
 

awk中同时提供了print和printf两种打印输出的函数。
1、其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。
2、printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。

猜你喜欢

转载自huangqiqing123.iteye.com/blog/2255499