Unix awk-如果为空,则使用默认值打印最后一列值
我正在使用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
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