AWK はレコードを印刷し、ファイルを列で区切り、空の場合は列を値に置き換えます。

AWK はレコードを印刷し、ファイルを列で区切り、空の場合は列を値に置き換えます。

大きなファイルを最初の列値で除算し、その列がNULLの場合は、NULL値を値に置き換えて、そのエラーレコードからファイルを作成する必要があります。私は次のことを試しました

awk -F'|' '{print match($1,/^ /) > $1 : "BAD"} $FILENAME

しかし、もちろんそれは動作しません。

A|123|zxy
B|321|zyx
|345|abc
A|456|zys

3つのファイル生成:A、、、BBAD

答え1

awk -F '|' '{ fname = $1 ? $1 : "BAD"; print >fname }' file

fname変数がある場合は最初の列の値に設定され、それ以外の場合に設定されますBAD。これにより、対応するファイル名で行が印刷されます。

お持ちの場合たくさん最初の列の値が異なる場合、printファイル記述子が不足するのを防ぐために、各ステートメント間の出力ファイルを閉じる必要があります。

awk -F '|' '{ fname = $1 ? $1 : "BAD"; print >>fname; close fname }' file

これで、ファイルを追加モードで開く必要があることに注意してください>>

関連情報