【发布时间】:2014-10-28 10:51:00
【问题描述】:
我有一个解析日志文件的 awk 脚本 脚本:
BEGIN{
print "ID", "vFiler", "Type", "host"
}
/=====/{
vFiler=$2
next
}
match($0,/root=[^,]*/){
n=split(substr($0,RSTART+5,RLENGTH-5),N,/:/)
for(i=1; i<=n; i++)print vFiler,$1,N[i];
}
现在我的问题是,正如您所看到的,在开始时设置了一个 ID,这应该意味着在脚本运行之前每次都输入,因为文件每次都有不同的 ID。所以我想知道我应该如何做到这一点,是否编写一个执行此操作并执行 awk 脚本的 shell 脚本。或者有没有办法在 awk 脚本中写这个(也许用 getLine ?!)?
我想要实现的输出是:
ID,vFiler,Type,host
1,vfiler0,/vol/vol0,fapra8.net
4,vfiler1,/vol/lnxpjmmorena,fcvapd10.net
4,vfiler1,/vol/CSArchive,fcvapd11.net
(在第二种情况下,ID 保持不变,因为服务器列在相同的类型上)
执行脚本后,它应该会说“输入 ID”之类的内容。
如果这不能在 awk 脚本中完成,请不要努力编写 shell 脚本(一般我只是想知道我该怎么做,但我很感激每一个答案)
提前致谢
【问题讨论】:
-
如果这是一个独立的 awk 脚本,将最后一个传递给 awk 的 args/文件作为您要搜索的内容。将变量设置为 argv[N] 然后从 argc 中删除它