awk & sed

一.awk:

    格式: awk '{pattern + action}' {fileName}

awk的调用方式:

a.命令行方式:

awk [ -F fileId-separator] 'commands' input_file

commands是真实要执行的命令,[ -F fileId-separator]是可填项,input_file是待处理文件,在awk中,文件的每一行中,由域分隔符分开的每一项都是一个域,通常,在不知道-F后面的分隔符seperator的时候,默认分隔符是空格。

b.shell脚本方式:

将awk指令写入到一个文件中,通过使用awk的解释器来执行文件

即将脚本的头行 #!bin/sh 改成 #!bin/awk     这样通过脚本名称即可调用

c.将所有的awk命令都抽取出到一个文件中,然后去执行

awk -f awk-script-file input_file

其中awk是加载awk-script-file中的wak脚本,输出到待处理文件input-file中,做统一调用。

 

实例:

last -n 5 | awk '{print $1}'            -------打印第一列数据

awk的工作流程;awk读入按‘\n’换行符分割,读取每行的时候,安装域分隔符来读取,默认的域分隔符是空格或者tab键,其中$0是整个域,$1是第一个域,$n是第n个域,所以这里第一个域就是用户名。

 

cat /etc/password | awk -F ‘:’  ‘{print $1}’     ---打印密码,分隔符是分号。(这种是分隔符和action实例)

 

cat /etc/password | awk -F ':'  '{print $1 "\t"$7}'    -----tab符分割第一个域和第七个域

 

cat /etc/password | awk -F ':'  'BEGIN{print  "name,shell"}  {print $1","$7}  END{print "blue,/bin/nosh"}'           -------------x先执行begin,在执行action,最后执行end内容

 

awk -F :  '/root/' /etc/passwd     搜索含有root关键字的所有行

awk -F : '/root/{print $7}'  /etc/passwd  搜索含root关键字的行并打印第七个域

 

 

awk的内置变量:

ARGC : 命令行参数个数

ARGV:命令行参数排列

ENVIRON:支持队列中系统环境变量使用

FILENAME:文件名称

FNR:浏览的文件记录数

FS:设置输入域分隔符,等价于 -F选项

NR:浏览的记录数

NF:浏览的域的个数

OFS:输出域分隔符

ORS:输出记录分隔符

RS:控制记录分隔符

 

awk -F ":"  '{print "fileName:"FILENAME  ",linenumber:"NR ",linecontent:"NF ",linecontent:" ORS}'        ----输出特定的变量。

也可以使用printf替换print,如下:

awk -F ":" '{printf (

"filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}'

 

 

转载于:https://my.oschina.net/u/3110937/blog/1593322

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值