我尝试使用带有多个gzip压缩输入文件的awk&next文件语句。
在发布之前我已经用Google搜索过了,但看起来我是唯一一个想要这样做的人:D
这就是我需要做的事情:
awk '
BEGIN{
print "start",strftime();
}
/match/{
print FILENAME,"->",$0
count++
nextfile
}
END{
print count
print "stop",strftime();
}
' /var/log/*.2015-01-23.gz
突然awk无法自己读取gzip文件,所以我必须使用zcat并且我修改了我的语法如下:
zcat /var/log/*.2015-01-23.gz | awk '
BEGIN{
print "start",strftime();
}
/match/{
print FILENAME,"->",$0
count++
nextfile
}
END{
print count
print "stop",strftime();
}
'
但这种方式nextfile语句不起作用,因为awk只看到一个输入数据流。
我的awk版本:
# awk --version
GNU Awk 3.1.7
注意:暴露的内容是我在 END 操作中需要执行的操作的简历,因此不建议使用zgrep或其他内容。我需要awk。
注2:文件将详细说明。
由于
答案 0 :(得分:1)
您可以逐个获取文件,将文件名保存在shell变量中并以awk格式打印:
#!/bin/bash
for LOGFILE in /var/log/*.2015-01-23.gz
do
zcat "$LOGFILE" |
awk '
BEGIN{
print "start",strftime();
}
/match/{
print "'$LOGFILE'","->",$0
last
}
END{
print "stop",strftime();
}
'
done