AWK和CUT

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014642915/article/details/55045203

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。

awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。


 AWK的三种使用方式

1.命令行方式
awk [-F  field-separator]  'commands'  input-file(s)
其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

2.shell脚本方式
将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
相当于shell脚本首行的:#!/bin/sh
可以换成:#!/bin/awk

3.将所有的awk命令插入一个单独文件,然后调用:
awk -f awk-script-file input-file(s)
其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。
 
 
awk的数据字段变量
$0表示整行文本
$1表示文本中第一个数据字段
$2表示文本中第二个数据字段
$n表示文本中第n个数据字段
awk的用-F来指定分隔符
默认的字段分隔符是任意空白字符(空格或者TAB)
 
 
awk命令的操作符
正则表达式和bash一致
数学运算:+,-,*,/, %,++,- -
逻辑关系符:&&, ||, !
比较操作符:>,<,>=,!=,<=,==  ~ !~
文本数据表达式:== (精确匹配)
~波浪号表示匹配后面的模式
 
 
AWK 的用法实例
# tail -5 /etc/passwd  <<取出前五行
saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
 
 
# tail -5 /etc/passwd |awk -F ':' '{print $1}'  <<以:为分隔符取出前五行的第一列(取出用户名)
saslauth
postfix
pulse
sshd
tcpdump
 
 
# awk -F: '$3>=500{print $1}' /etc/passwd  
 显示UID大于500的用户名
#awk -F: '$3 != $4 {print $1}' /etc/passwd 
显示UID不等于GID的用户名
#awk -F: '/^h/ && /bash/{print $1}' /etc/passwd
显示用户名以h开头且包含hash字段的普通用户
 
 
 
 
 
 
 
 
 
 
 

猜你喜欢

转载自blog.csdn.net/u014642915/article/details/55045203