awk 'BEGIN{OFS=","} FNR == 1
{if (NR > 1) {print fn,fnr,nl}
fn=FILENAME; fnr = 1; nl = 0}
{fnr = FNR}
/ERROR/ && FILENAME ~ /\.gz$/ {nl++}
{
cmd="gunzip -cd " FILENAME
cmd; close(cmd)
}
END {print fn,fnr,nl}
' /tmp/appscraps/* > /tmp/test.txt
上記は、特定のディレクトリ内のすべてのファイルをスキャンします。ファイル名、各ファイルの行数、および検出された 'ERROR' を含む行数を出力します。
現在、スクリプトが読み取ったファイルのいずれかが通常のファイルでない場合にコマンドを実行するようにしようとしています。つまり、ファイルが gzip ファイルの場合、特定のコマンドを実行します。
上記は、そこに gunzip コマンドを含めて、自分で実行しようとする私の試みです。残念ながら、それは機能していません。また、ディレクトリ内のすべてのファイルを事前に「gunzip」することはできません。これは、ディレクトリ内のすべてのファイルが「gzip」タイプになるわけではないためです。一部は通常のファイルになります。
そのため、別の方法で見つかった.gzファイルを処理するスクリプトが必要です。これにより、それを読み取り、その中にある行数をカウントして出力し、指定されたパターンに一致する行数を見つけました(ファイルは通常のファイルでした)。
助けはありますか?