大きなファイルを最初の列値で除算し、その列がNULLの場合は、NULL値を値に置き換えて、そのエラーレコードからファイルを作成する必要があります。私は次のことを試しました
awk -F'|' '{print match($1,/^ /) > $1 : "BAD"} $FILENAME
しかし、もちろんそれは動作しません。
A|123|zxy
B|321|zyx
|345|abc
A|456|zys
3つのファイル生成:A
、、、B
BAD
答え1
awk -F '|' '{ fname = $1 ? $1 : "BAD"; print >fname }' file
fname
変数がある場合は最初の列の値に設定され、それ以外の場合に設定されますBAD
。これにより、対応するファイル名で行が印刷されます。
お持ちの場合たくさん最初の列の値が異なる場合、print
ファイル記述子が不足するのを防ぐために、各ステートメント間の出力ファイルを閉じる必要があります。
awk -F '|' '{ fname = $1 ? $1 : "BAD"; print >>fname; close fname }' file
これで、ファイルを追加モードで開く必要があることに注意してください>>
。