Awk 使用技巧

awk语法格式

‘BEGIN { cmd; ... cmd; }   #读取文件之前的操作

            { cmd; ... cmd; }    #每一行都进行的操作

            { cmd; ... cmd; }    #每一行执行的第二个操作,会换一行输出

...                                      #以此类推

条件判断 || /regex/ { cmd; ... cmd; }    #匹配到的行进行的操作

...                                      #以此类推

END { cmd; ... cmd; }’      #读取文件之后进行的操作

当指令很长的时候,可以将指令写入文件

awk  -f '指令文件' 待处理文件

快速上手

awk '{print $0}' file    #打印所有列
awk '{print $1}' file  #打印第一列
awk '{print $1, $3}' file   #打印第一和第三列
cat file | awk '{print $3, $1}'   #打印第三列和第一列,注意先后顺序。
cat file | awk '{print $3, $NF}' #打印第三列和最后一列
awk -F ":" '{print $1, $3}' /etc/passwd  #以“:”为分隔符分割列,然后打印第一列和第三列awk -F ":" '/root/ {print $0}' /etc/passwd #匹配有root的行 

$NF(Number of Fields) $ 表示最后,NF 表示第几列,$NF 表示最后一列,$(NF-1)表示倒数第二列,以此类推。

去掉第一行

ps aux | awk 'NR >1 {print $0}'

保留表头输出特定行

ps aux | awk 'NR==1 || /http/ { print $0 }'

常用的正则表达式

元字符定义案例备注
.任何单个字符h.t
test.
中间是任意字符的 h.t 三个字符
末尾是任意字符的五个字符 test.
[]方括号中的任意字符[abc]
[0-2]
r[oa]t
包含a或b或c的字符
包含0或1或2的字符
包含rot或rat
[^ ]不包含方括号中的任意字符[^abc]不包含a或b或c
^以什么开头^ro以ro开头
$以什么结尾.$
nc$
任意字符结尾
nc结尾
*零个或多个前面的字符ho*tht中间的o可以是0个或多个
+一个或多个前面的字符ro+trt中间的o可以是1个或多个
?零个或一个字符roo?trot或root
\转义字符\?匹配?号
.*任意字符Test.*ing\.Test与ing.中间的任意字符

字符集

[:alnum:]Alphanumeric characters.
[:alpha:]Alphabetic characters.
[:blank:]Space or tab characters.
[:cntrl:]Control characters.
[:digit:]Numeric characters.
[:graph:]Characters that are both printable and visible.  (A space is printable, but not visible, while an a is both.)
[:lower:]Lowercase alphabetic characters.
[:print:]Printable characters (characters that are not control characters.)
[:punct:]Punctuation characters (characters that are not letter, digits, control characters, or space characters).
[:space:]Space characters (such as space, tab, and formfeed, to name a few).
[:upper:]Uppercase alphabetic characters.
[:xdigit:]Characters that are hexadecimal digits.

AWK中的变量

变量说明
ARGC命令行参数的数目
ARGIND命令行中当前文件的位置(从0开始算)
ARGV包含命令行参数的数组
CONVFMT数字转换格式(默认值为%.6g)
ENVIRON环境变量关联数组
ERRNO最后一个系统错误的描述
FIELDWIDTHS字段宽度列表(用空格键分隔)
FILENAME当前输入文件的名
FNR同NR,但相对于当前文件
FS字段分隔符(默认是任何空格)
IGNORECASE如果为真,则进行忽略大小写的匹配
NF表示字段数,在执行过程中对应于当前的字段数
NR表示记录数,在执行过程中对应于当前的行号
OFMT数字的输出格式(默认值是%.6g)
OFS输出字段分隔符(默认值是一个空格)
ORS输出记录分隔符(默认值是一个换行符)
RS记录分隔符(默认是一个换行符)
RSTART由match函数所匹配的字符串的第一个位置
RLENGTH由match函数所匹配的字符串的长度
SUBSEP数组下标分隔符(默认值是34)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值