awk使用的一点体会
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk使用的一点体会相关的知识,希望对你有一定的参考价值。
刚刚开始学习linux学到awk命令自己也上机实验了一下在网上看到老男孩老师的一篇文章感觉非常棒(文章贴在后边)在结合自己的体会写出来供大家参考:
1、awk的运行原理我自己的理解:如下图
2、重要参数和举例说明:
例如:假设我们有个文件内容如下
1 2 3 4 5
A 11 22 ; 77
B 33 44 88 99
C 55 ; 66 100
参数1:可以打印出目前处理的行和列数(NF和NR)
[[email protected] ~]# awk ‘{print NF"\t"NR}‘ /data/a.txt
5 1
5 2
5 3
5 4
可以看出就是一行一行的处理的而且还打印除了列数和行号在改一下吧,看着不清楚
[[email protected] ~]# awk ‘{print "clum:="NF"\t""line="NR}‘ /data/a.txt
clum:=5 line=1
clum:=5 line=2
clum:=5 line=3
clum:=5 line=4
参数2:指定分隔符-F用这个参数可以指定分隔符是什么,默认情况下是空格
[[email protected] ~]# awk -F";" ‘NR==2 {print $2 }‘ /data/a.txt
77
可以看出上面的语句是以";"为分割符打印出第二行的第二列
注意:(非常重要)
这个-F参数有一个特别重要的功能就是可以指定多个分隔符就用oldboy老师的那个例子来说明问题
[[email protected] ~]# echo ----1:2----:3|awk -F ‘[-:]+‘ ‘{print $3}‘
2
因为第一列是空格因此$3才会输出2;
参数3:用printf来指定格式输出,例如我们用用户名文件/etc/passwd为例来说明
[[email protected] ~]# awk -F ‘:‘ ‘NR>8&&NR<20 {print $1"\t"$5}‘ /etc/passwd
mail mail
uucp uucp
operator operator
games games
gopher gopher
ftp FTP User
nobody Nobody
dbus System message bus
vcsa virtual console memory owner
abrt
haldaemon HAL daemon
看着不是很对齐这情况我就可以用printf来设定格式了和C语言基本一样就是
[[email protected] ~]# awk -F ‘:‘ ‘NR>8&&NR<20 {printf"%10s %10s\n", $1,$5}‘ /etc/passwd
mail mail
uucp uucp
operator operator
games games
gopher gopher
ftp FTP User
nobody Nobody
dbus System message bus
vcsa virtual console memory owner
abrt
haldaemon HAL daemon
这里不要忘记反斜杠n不然更乱。
其他的功能我就还不是很清楚以后在慢慢请了在补充进来。
oldboy文章:http://blog.51cto.com/oldboy/950730
以上是关于awk使用的一点体会的主要内容,如果未能解决你的问题,请参考以下文章