awk记录

awk

cat install.log | awk '/^Installing/ {print $0}'
匹配以Install打头的行,$0所有列,$1第1列,依次类推

cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "test,/bin/sh"}'
name,shell
root,/bin/bash
daemon,/bin/sh
bin,/bin/sh
sys,/bin/sh
....
test,/bin/sh
以:为分隔符,并在最前面输出name,shell,最后输出test,/bin/sh


awk 'NR%2==1{print $0}' /etc/passwd
隔行打印
awk 'END{print $0}'
打印最后一行

awk 'NR==5{print $0}'
打印第5行,NR已读的记录行数

awk '{$1="";print}'
打印非第1列

awk '{a[$NF]++}END{for(i in a)print i,":",a[i]}' test.log |sort -k 2 -r |head -3
打印出日志中,出现频率前3的行,以及出现的次数。NF浏览记录的域,此处将每次读取到的域作为key保存并累计+1,-k指定以哪个区间排序(默认升序,小的在前面),-r倒序,此处是以第2区间,因为for…in 输出,因为数组是关联数组,默认是无序的。所以通过for…in 得到是无序的数组。如果需要得到有序数组,需要通过下标获得。

awk '{a[$NF]++}END{for(i=1;i<=asort(a);i++)print a[i]}' test.log
打印有序数组


[root@localhost ~]# echo "a b c 2015-09-18 1:2" | awk 'sub(/-/,"")'
a b c 201509-18 1:2
替换

[root@localhost ~]# echo "a b c 2015-09-18 1:2" | awk 'gsub(/-/,"")'
a b c 20150918 1:2
全部替换


[root@localhost ~]# cat 1.txt
1 #1
2 #2
3 #3
4 #4
5 #5
6 #6
7 #7
8 #8
19 #19

[root@localhost ~]# cat 1.txt | awk '/^1/{sub(/#/,"*");print}'
1 *1
19 *19
匹配以1打头的行并替换#为*号再将其打印出

*
匹配前面的子表达式任意次。*等价于{0,}。如<a*匹配<也匹配<a
+
匹配前面的子表达式一次或多次(大于等于1次)。+等价于{1,}。
|
将两个匹配条件进行逻辑“或”(Or)运算。例如正则表达式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:这个元字符不是所有的软件都支持的。

[root@localhost ~]# echo '123456' |awk 'BEGIN{FS=""}END{for(i=NF;i>=1;i--)a+=$i;print a}'
21
[root@localhost ~]# echo "123456789" |awk -F "" '{for(i=1;i<=NF;i++){s+=$i}}END{print s}'
45
求和

[root@localhost ~]# echo '123456' |awk 'BEGIN{FS=""}END{for(i=NF;i>=1;i--)a=a$i;print a}'
654321
改变顺序




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值