您的位置:首页 > 其它

awk学习笔记---更新中

2011-07-01 10:53 218 查看
awk博大精深,只是自己知道,用过的在这整理一下,以后还是会不断的去更新,让这个blog成为自己成长、工作的一个记录本...... 属组、函数

1、用awk输出sshd到apache用户之间的行
# awk '/sshd/,/apache/' /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
avahi-autoipd:x:100:104:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
benson:x:500:500::/home/benson:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin
2、第3列是14的行 \\这个在debian下试验不成功,centos下成功
# awk '$3==14' /tmp/pass
ftp x 14 50 FTP User /var/ftp
第一列是nobody的行
# awk '$1=="nobody"' /tmp/pass
nobody x 99 99 Nobody /
3、带x的行打印出第1、2列
# awk '/x/ {print $1,$2}' pass \\此处的x为正行中第一个字段
# awk '/^(benson|apache)/ {print $1,$2}' k \\以benson|apache开头的行打印第1,2列
4、打印第一列是benson的那一行的第1,3列
# awk '$1 ~/benson/ {print $1,$3}' pass \\此处的benson必须为第一列的字段,注意前面的~
# awk '$1 ~/^(benson|x)/ {print $1,$2}' k \\第1列是benson|x的行打印第1,2列
5、NR 文件的记录号,即行号全部列出
NF 域的个数,即一共几列
$NF 最后一列
# awk '{print NR,NF,$NF}' k \\输出pass文件的行数,列数,最后一列的内容
1 5 /home/benson
2 6 /var/www
3 5 /etc/ntp
[root@test05 tmp]# cat k
benson x 500 500 /home/benson
apache x 48 48 Apache /var/www
ntp x 38 38 /etc/ntp
6、# cat k
benson x 500 500 /home/benson
apache x 48 48 Apache /var/www
ntp x 38 38 /etc/ntp
* [root@test05 tmp]# awk '{print $1,$2,$3}' k \\默认按照空格分开来了,常规打印
benson x 500
apache x 48
ntp x 38
*[root@test05 tmp]# awk '{print $1$2$3}' k \\没有逗号的却别在于中间无空格分开
bensonx500
apachex48
ntpx38
* [root@test05 tmp]# awk '{print $1":"$2" "$3}' k \\自己添加分隔符,用双引号隔开
benson:x 500
apache:x 48
ntp:x 38
7、非默认分隔符分隔
[root@test05 tmp]# cat a
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
benson:x:500:500::/home/benson:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin
[root@test05 tmp]# awk -F ":" '{print $1,$2}' a \\冒号就是定义的分隔符了
xfs x
benson x
apache x
[root@test05 tmp]# awk 'BEGIN {FS=":"}{print $1,$2}' a \\两个写法效果相同
xfs x
benson x
apache x
[root@test05 tmp]# awk -F "[:?]" '{print $1,$2}' a \\ []内定义多个分隔符来区分
xfs x
benson x
apache x
[root@test05 tmp]# cat a
xfs:x:43?:43:X Font Server:/etc/X11/fs:/sbin/nologin
benson:x?500:500::/home/benson:/bin/bash
apache:x?48:48:Apache:/var/www:/sbin/nologin
# awk 'BEGIN {OFS="?"}{print $1,$2}' k \\通过OFS定义输出分隔符
benson?x
apache?x
ntp?x
8、awk求和计算,计算passwd文件第三列数字的和
$ awk -F ":" '{sum+=$3} END{print sum}' /etc/passwd
awk '{sum+=$3;n++}; END {print sum/n}' file \\求平均
67109
9、删除文件最后2行\\awk需要缓存整个文件,所以如果是大文件不推荐使用
[root@test05 tmp]# cat a
xfs:x:43?:43:X Font Server:/etc/X11/fs:/sbin/nologin
benson:x?500:500::/home/benson:/bin/bash
apache:x?48:48:Apache:/var/www:/sbin/nologin
xfs:x:43?:43:X Font Server:/etc/X11/fs:/sbin/nologin
[root@test05 tmp]# awk '{B[NR]=$0} END {for (i=1;i<=NR-2;i++) print B[i]}' /tmp/a
xfs:x:43?:43:X Font Server:/etc/X11/fs:/sbin/nologin
benson:x?500:500::/home/benson:/bin/bash
[root@test05 tmp]#

10、awk 第一列替换
[root@cstrike tmp]# cat a
86 tar xzvf nagios-plugins-1.4.15.tar.gz
87 cd nagios-plugins-1.4.15
88 ls
89 ./configure --with-nagios-user=nagios --with-nagios-group=nagios
90 make
91 make install
删除数字这一列
# awk '{$1="";print $0}' file \\将第1列赋值为空,也可以设置为其他符号实验。

11、在第一列前添加“‘ ”

# cat test.txt
zhangy
llccyd
hjh
a
# awk '{print "'\''","\t", $0}' test.txt
\\双引号中间再加2个单引号,单引号中间再添加转义的\'
#awk '{print "\047",$0}' test.txt \\作用相同
' zhangy
' llccyd
' hjh
' a

12、2列一行,awk实现

[root@demo2 tmp]# cat a
a
b
c
d

[root@demo2 tmp]# awk '{if (NR%2==0){print $0} else {printf"%s ",$0}}' a
a b
c d

13 每3行合并一行

awk '{printf(NR%3)?$0" ":$0"\n"}' sed 'N;N;s/\n//g'

本文出自 “带着梦想~追逐我的真彩” 博客,请务必保留此出处http://bensonzy.blog.51cto.com/227860/600520
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: