Unix awk-如果为空,则使用默认值打印最后一列值

Unix awk-如果为空,则使用默认值打印最后一列值,unix,awk,Unix,Awk,我正在使用awk命令打印这些值。对于最后一列,如果没有找到值,我需要它打印NA 例如,在下面的代码中,当$3为NULL时,我需要打印为NA 如果/为空条件或其他什么,我是否可以包含一个 awk -F" " '{ print $1,"|", $2, "|", $3 }' log_temp.txt > log_template.txt 无论如何,我是否可以包含一个'if'/'isnull'条件或其他什么 awk -F" " '{ print $1,"|", $2, "|", $3

我正在使用awk命令打印这些值。对于最后一列,如果没有找到值,我需要它打印
NA

例如,在下面的代码中,当
$3
NULL
时,我需要打印为
NA

如果/
为空
条件或其他什么,我是否可以包含一个

awk -F"    " '{ print $1,"|", $2, "|", $3 }' log_temp.txt > log_template.txt
无论如何,我是否可以包含一个'if'/'isnull'条件或其他什么

awk -F"    " '{ print $1,"|", $2, "|", $3 }' log_temp.txt > log_template.txt
你需要使用

语法:

第三栏

awk '{ print ($3==""?"NA":$3) }' infile
所以它变成了

awk '{ print $1, "|" , $2, "|",  ($3==""?"NA":$3) }' infile
您还可以设置输出字段分隔符变量(
OFS

打印($3==“”?“NA”:$3)

if( $3=="" ){
    print "NA"
}else{
    print $3
}  
对于最后一列,您可以使用
NF
变量,该变量在 记录,而
$NF
是最后一列


您可以使用sed执行此任务

如果输入文件中的分隔符为“4空格”

可以使用字段数设置变量

field=3
# set the number of fields
sed '
s/\([^ ][^ ]*\)/&/'"$field"'
# match each field and operate the substitution on the last field
t
# if the last field is not empty jump to end
s/$/    NA/
# substitute the end of line with delimiter (4 spaces) and NA
' infile

cat infile 
aaaa    bbbb    cccc
dddd    eeee
ffff    gggg    hhhh
iiii    jjjj

output
aaaa    bbbb    cccc
dddd    eeee    NA
ffff    gggg    hhhh
iiii    jjjj    NA

也许这是你想要的,谢谢。这正是我想要的。一个问题:我是否可以动态地获取列计数,而不是硬编码为print$1、$2、$3等。变量
NF
在记录中没有字段,假设您想检查所有字段,那么您可以像
awk-v of s='|'''''{for(I=1;我必须知道
print$3=''?“NA”那样循环它:$3等将在某些AWK中产生语法错误。请始终将三元表达式括起来,例如,
print($3==“”?“NA”:$3)
即使在没有必要的awk中,它也可以提高清晰度。@EdMorton按照您的建议添加了括号,谢谢。很好。OSX awk就是一个例子,如果没有括号,代码就会产生语法错误。
field=3
# set the number of fields
sed '
s/\([^ ][^ ]*\)/&/'"$field"'
# match each field and operate the substitution on the last field
t
# if the last field is not empty jump to end
s/$/    NA/
# substitute the end of line with delimiter (4 spaces) and NA
' infile

cat infile 
aaaa    bbbb    cccc
dddd    eeee
ffff    gggg    hhhh
iiii    jjjj

output
aaaa    bbbb    cccc
dddd    eeee    NA
ffff    gggg    hhhh
iiii    jjjj    NA