- 论坛徽章:
- 0
|
把
#!/bin/awk -F:\t
变成
#!/bin/awk -f
可以了
在直接使用awk命令操作时awk -F: '{print $1}' /etc/passwd
使用的是F,在脚本里要改用f?
直接在命令行省略-F时,不会自动把\t识别为分隔符,在脚本里会自动识别了?
过滤相同行:
如有一个文件strip中有多条重复错误提法:
[sam@Linux_chenwy sam]$ cat strip
etreiytrpytyu
ERROR*
ERROR*
ERROR*
ERROR*
IUEWROPYJRTMELUYK
ERROR*
ERROR*
ERROR*
ERROR*
ERROR*
ERROR*
EWUTIRWJYHT
ERROR*
ERROR*
JGIOERYO56ERU
ERROR*
ERROR*
ERROR*
JGEORYKP65EKU;YK,
现在用a w k脚本过滤出错误行的出现频率,使得每一个失败记录只对应一个错误行。awk脚本如下:
[sam@Linux_chenwy sam]$ cat error_strip.awk
#!/bin/awk -f
#error_strip.awk
#to call:error_strip.awk<filename>;
#strips out the ERROR* lines if there are more than one
#ERROR* lines after each failed record.
BEGIN {error_line=""}
#tell awk the whole is "ERROR*"
{if ($0=="ERROR*" && error_line=="ERROR*")
#go to next line
next;
error_line=$0;print}
执行结果如下:
[sam@Linux_chenwy sam]$ ./error_strip.awk strip
etreiytrpytyu
ERROR*
IUEWROPYJRTMELUYK
ERROR*
EWUTIRWJYHT
ERROR*
JGIOERYO56ERU
ERROR*
JGEORYKP65EKU;YK,
这个是精华帖的原文,但是这里error_strip.awk怎么看都看不明白
BEGIN {error_line=""} //把error_line定义为空
{if ($0=="ERROR*" && error_line=="ERROR*") //如果某行是"ERROR*" 且error_line=="ERROR*"(不懂,上面不是已经把error_line定义为空了吗?)
next; //next不懂....
error_line=$0;print} //把error_line置换为$0,$0是"ERROR*"?
[ 本帖最后由 77902543 于 2006-2-8 16:15 编辑 ] |
|