Linux之awk

awk是一个比较倾向于处理一行当中多个字段处理与显示,它的语法大致如下:

# awk [-fF] '条件类型1{动作1} 条件类型2{动作2}' filename

  • -f : 指定awk解析脚本,相当于把上述的“条件类型”与“动作”写入到脚本当中;
  • -F :指定分割符号,默认为【空格】,相当于FS,下面会说到;

特殊变量:

变量名称代表意义
NF每行所拥有的字段总数,有可能会看到$NF其代表显示最后一个字段的数据
NR当前awk所处理的【第几行】数据
FS分割字符,默认为【空格】键;也可通过-F 设定
OFSawk输出(print)时在一行当中,每个字段之间所设定的分隔符,默认为【空格键】。
ORSawk输出(print)时行与行之间所设定的分隔符,默认为【\n】。


特殊区域块:

定义方式代表意义
BEGIN{}初始化区域块,其作用为在执行动作前先执行BEGIN{}区域的内容
END{}其作用为当整个awk执行完动作后,最后所执行的END{}区域内容






范例一:显示/etc/passwd中的用户名

# awk -F ":" '{print $1}' /etc/passwd
在/etc/passwd的数据当中,每行的数据是以“:”来分割,而不是默认的【空格】键,所以这块需要对其进行指定。

'{}' 其动作固定写法,这里必须是单引号。而$1代表着第一个字段。


范例二:仅显示/etc/passwd中第1,3行的数据。并行于行之间空两行显示,其段段之间的分隔符为“-”,显示用户名、GID和最后一个字段

awk 'BEGIN{FS=":";OFS="-";ORS="\n\n"} NR == 2 || NR == 3 {print $1,$3,$NF}' /etc/passwd
这里唯一需要特殊说下的是“$NF”,其意思为最后的字段。


范例三:显示/etc/passwd数据中,其用户名、当前行数、总字段数

awk -F ":" '{printf "%10s  lines:%4d  columes:%4d \n", $1, NR, NF}' /etc/passwd

范例四:显示当前用户使用次数最多的前10个命令

awk '{++a[$1]}END{for(i in a)print i, a[i] | "sort -k2 -rn"}' ~/.bash_history | head


范例五:利用awk执行shell命令

echo "/usr/local/bak_1;/usr/local/bak_2;/usr/local/bak_3" | awk -F ";" '{mkdir="mkdir "$1;system(mkdir)}'


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值