awk csvは間違った行をstderrに出力することを処理します。

awk csvは間違った行をstderrに出力することを処理します。

フォルダから複数のCSVファイルをインポートし、gzipファイルに入れてファイル名からフィールドを抽出するスクリプトがあります。

awk -F";" 'BEGIN { OFS = FS }
FNR == 1 { match(FILENAME, "([0-9]{8})", a); JOBID = a[1]; print $0, JOBID }
FNR > 1 { print $0, JOBID }' Event_*txt | gzip > agzipfile.gz

私の目標は、NF行に5つのフィールドが含まれていることを確認し、そうでない場合はその行をstderrまたは他のファイルに印刷することです。
しかし、私はこれを行う正しい方法を理解したり見つけることができません。
可能ですか?達成する方法?
PS:私はGNUを使用していますawk

答え1

AWK内でリダイレクトできます。

NF != 5 { print > "/dev/stderr"; next }

/dev/stderrGNU AWKが内部的に処理する特別なファイル名の1つです。 (他のAWK実装は可能であれば作成します/dev/stderr。多くのシステムでは、接続はとにかく標準エラーに接続されるため、結果は同じです。)

バラよりリダイレクトに関するマニュアルのこのセクション特殊ファイル記述子についてです。

関連情報