带压缩输入的gawk nextfile

时间:2015-01-24 12:56:47

标签: bash gzip gawk

我尝试使用带有多个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:文件将详细说明。

由于

1 个答案:

答案 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