论坛首页 综合技术论坛

awk使用的简单例子

浏览 13403 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-10-12  
原始文本命名为log,内容只有一行:
2010-10-12 10:46:32,663 INFO [com.peacock.rest.service.impl.MessageRestServiceImpl] - am=getUnreadMessageCount<|>ab=100<|>af=iPhone<|>adid=13288785908f5fe3fa6f1ef4a419c0cb5e5a72cc<|>aip=58.163.175.132<|>wv=1.0<|>asid=3CBCD99761FEA49C571731727C7B9EF0<|>iua=iPhone<|>pov=3.1.2<|>abt=1<|>at=2010-10-12 10:46:32<|>ar=_<|>auid=479625<|>acode=000000<|>art=0


如何以空格分割各字段:
cat log|awk '{print $数字}'
分别为(默认以空格分割):
1 2010-10-12
2 10:46:32,663
3 INFO
4 [com.peacock.rest.service.impl.MessageRestServiceImpl]
... ...

如何截取以am=开头的字符串:
cat log|awk '{match($0,"am=");print substr($0,RSTART)}'
这里使用了match和substr两个内置函数。其中$0表示整行记录。

对以am=开头的字符串进行<|>分割:
cat log|awk '{match($0,"am=");print substr($0,RSTART)}'|awk -F "<[|]>" '{print $数字}'
这里使用管道再次调用了awk。
注意,因为<|>作为分隔符比较特殊,如果单纯使用<|>,awk会认为使用<或者>来分割。所以遇到|作为分隔符的话,使用[|]转义一下就可以了。
1 am=getUnreadMessageCount
2 ab=100
3 af=iPhone
4 adid=13288785908f5fe3fa6f1ef4a419c0cb5e5a72cc
... ...

输出每个函数以及执行它所花的时间(其中am=表示函数名,art=表示执行时间):
cat log|awk '{match($0,"am=");print substr($0,RSTART)}'|awk -F "<[|]>" '{match($0,"art=[0-9]+");art=substr($0,RSTART,RLENGTH);printf "%s %d\n",substr($1,4),substr(art,5)}'
输出:
getUnreadMessageCount 0
关键地方是使用match和substr来获取art的值。

如果有多行记录,对它们进行排序:
cat log|awk '{match($0,"am=");print substr($0,RSTART)}'|awk -F "<[|]>" '{match($0,"art=[0-9]+");art=substr($0,RSTART,RLENGTH);printf "%s %d\n",substr($1,4),substr(art,5)}'|sort -k1,1 -k2rn
这里使用了sort命令和-k选项。首先根据函数名进行排序,然后再根据执行时间进行降序。
   发表时间:2010-10-20  
awk是个强大的东西
0 请登录后投票
   发表时间:2010-10-20  
你这awk 也刚用了个皮毛. 还有更强大的呢. 建议LZ再多看看. awk的程序还是看起来很优雅的.
0 请登录后投票
   发表时间:2010-10-21  
强什么大,要不是写起来太过晦涩,主要不就是一个split吗。
0 请登录后投票
   发表时间:2010-10-21  
确实很入门,如果LZ有好的awk使用经验,建议来个专栏来写
0 请登录后投票
   发表时间:2010-10-22  
一.目录的权限位
1.目录的读权限位意味着可以列出其中的内容。
2.写权限位意味着可以在该目录中创建文件。
3.执行权限位则意味着搜索和访问该目录.

二.目录的权限将会覆盖该目录中文件的权限。
例如,如果目录docs具有如下的权限:
drwx r-- r-- 1 louise admin 2390 Jul 23 09:44 docs
而其中的文件pay的权限为:
-rwx rwx rwx 1 louise admin 5567 Oct 3 05:40 pay
那么admin组的用户将无法编辑该文件,因为它所属的目录不具有这样的权限。
0 请登录后投票
   发表时间:2010-10-22  
三.suid/guid
chmod u+s <filename>
suid意味着如果某个用户对属于自己的shell脚本设置了这种权限,那么其他用户在执行这一脚本时也会具有其属主的相应权限。
例子1:
如果想要对文件login设置suid,它当前所具有的权限为rwx rw- r-- (741),需要在使用chmod命令时在该权限数字的前面加上一个4(设置guid时加一个2),即chmod 4741,这将使该文件的权限变为

rws rw- r - -。
   $ chmod 4741 logit

一旦设置了这一位,一个s将出现在x的位置上。记住:在设置suid或guid的同时,相应的执行权限位必须要被设置。例如,如果希望设置guid,那么必须要让该用户组具有执行权限。如果没有赋予执行

权限而设置suid则x会变为大S,我们可以忽略它。

例子2:
chmod 6711 rws --s --s 文文件被设置了suid和guid,文件属主具有读、写和执行的权限,所有其他用户具有执行的权限

四.查自己所属的用户组:使用group或者id
0 请登录后投票
   发表时间:2010-10-22  
五.umask值
  umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。对于文件来说,这一数字的最大值分别是6。系统不允许你在创建一

个文本文件时就赋予它执行权限,必须在创建后用umask命令增加这一权限。目录则允许设置执行权限,这样针对目录来说, umask中各个数字最大可以到7。
例子:
umask值002 所对应的文件和目录创建缺省权限分别为664和775。
查看缺省权限:umask
设置缺省权限:umask 002
0 请登录后投票
   发表时间:2010-10-22  
六.符号链接

UNIX文件系统提供了一种将不同文件链接至同一个文件的机制,我们称这种机制为链接.它可以使得单个程序对同一文件使用不同的名字.这样的好处是文件系统只存在一个文件的副本.系统简单地通过在

0 请登录后投票
   发表时间:2010-10-22  
目录中建立一个新的登记项来实现这种连接,该登记项具有一个新的文件名和要连接文件的inode号.文件的目录登记项就是所谓的文件硬链接.不论一个文件有多少硬链接,在磁盘上只有一个描述它的

inode.只要该文件的链接数不为0,该文件就保持存在.
我们把符号链接称为软链接,它是指向另一个文件的特殊文件,这种文件的数据部分仅包含它所要链接文件的路径名.软链接是为了克服硬
链接的不足而引入的.软链接不直接使用inode号作为文件指针,而是使用文件路径名作为指针.软件有自己的inode,并在磁盘上有一小片空间存放路径名.因此,软链接能够跨文件系统,也可以和目录链接!!!其二,软链接可以对一个不存在的文件名进行链接,但直到这个名字对应的文件被创建后,才能打开其链接.
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics