我需要按第一列值分解一个大文件,当该列为空时,用一个值替换空值,并仍然从这些错误记录创建一个文件。我尝试过类似的东西
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
请注意,我们现在必须以附加模式打开文件>>
。