【Shell】AWK知识小结

awk -f program-file file
awk program-text file

-F 

不写默认为 -F " "

使用多个分界符 -F [@#] 或者 -F '@|# '

# echo "$USER $(date -I):$HOSTNAME" | awk -F "[ :]" '{print $3}'
# echo "$USER $(date -I):$HOSTNAME" | awk -F ' |:' '{print $3}'

使用组合分界符

# last -n 5 |gawk -F ' +-? *' '{print $8}'

 

-v

定义变量

# awk -v root="root" -F: '{if($1==root){print $7}}' /etc/passwd

 

-f

awk脚本的编写

# cat test.awk 
BEGIN{
FS=":"
}
{
if ($1=="root"){
print $7
}
}
END{
print "It is over."
}

 

自带变量的含义及修改效果

NR
到此为止,输入的记录条数


FNR
到此为止,本文件输入的记录条数

# awk -F: '{print $1"\t\t"FNR,NR}' passwd /etc/passwd

 

FS
输入的field之间的分界符

 

OFS
输出的field之间的分界符

# awk 'BEGIN{FS=":";OFS="@"}/root/{print $1,$2,$3}' /etc/passwd

 

RS
输入的record之间的分界符

# while read line; do echo $line | awk 'BEGIN{FS="@";RS=" "}{print $2}' ; done <<< $(echo -e "1@2@3@4 a@b@c@d@e ha@hb@hc@hd@he\nda@db@dc@dd@de ja@jb@jc@jd@je pa@pb@pc@pd@pe")

 

ORS
输出的record之间的分界符

 

# while read line;do echo $line | awk 'BEGIN{FS="@";RS=" ";ORS="###"}{print $2}' ; done <<< $(echo -e "1@2@3@4 a@b@c@d@e ha@hb@hc@hd@he\nda@db@dc@dd@de ja@jb@jc@jd@je pa@pb@pc@pd@pe")

 

NF
一条record被分成field的数目

# awk 'BEGIN{FS=":";OFS="@"}/root/{print (NF-1),$(NF-1)}' /etc/passwd

 

OFMT
定义输出小数的格式

# awk 'BEGIN{print 2/3;OFMT="%.2g";print 2/3}'

 

RT
类似于RS,但是结尾处理比RS好

echo "111 222|333 444|555 666"|awk 'BEGIN{RS="|"}{print $0,RT}'


逻辑判断

awk '/root/{if((3 == 2)||(2==2)){print $1}}' /etc/passwd
awk '/root/{if((3 == 2)&&(2==2)){print $1}}' /etc/passwd
awk -F: '($1=="root"){print $0}' /etc/passwd
awk -F: '/root/{NF<5?var=NF:var=5;{print $2,var}}' /etc/passwd
awk -F: '$1=="root", $1=="halt"{print $0}' passwd

 

 

格式化输出

awk -F: '/root/{printf "%10s\n",$1}' /etc/passwd
%c ,%d, %i ,%e, %E,%f, %F,%g, %G,%o,%u,%s,%x, %X,%%

 

转载于:https://www.cnblogs.com/caizhifeng/p/10281105.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值