AWK 打印记录以按列分隔文件,并在为空时用值替换该列

AWK 打印记录以按列分隔文件,并在为空时用值替换该列

我需要按第一列值分解一个大文件,当该列为空时,用一个值替换空值,并仍然从这些错误记录创建一个文件。我尝试过类似的东西

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

但这当然行不通。

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

创建 3 个文件:ABBAD

答案1

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

这会将变量设置fname为第一列的值(如果存在),否则设置为BAD。然后该行将打印到该文件名。

如果你有很多如果第一列中的值不同,那么您可能需要关闭每个print语句之间的输出文件,以免用完文件描述符:

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

请注意,我们现在必须以附加模式打开文件>>

相关内容