如果输出列为空,我想打印'NA',
$cat file.txt
111||aa1|11a|key
|bbb|aa2|22a|key
333|ccc||33a|key
444|ddd||44a|key
555|eee|aa5|55a|key
如果我不懂,我会变得
$awk -F'|' '{print $1,$2,$3}' file.txt
111 aa1
bbb aa2
333 ccc
444 ddd
555 eee aa5
但是我希望空白列中填充“ NA”,如下所示:
111 NA aa1
NA bbb aa2
333 ccc NA
444 ddd NA
555 eee aa5
尝试:
$awk -F'|' '{print '!$1 $1="NA"}',$2,$3}' file.txt
awk -F'|' '{print $1,if($2=="") $2="NA",$3}' file.txt
如果该字段为空,请帮助我填写“ NA”
答案 0 :(得分:4)
您可以使用此awk
:
awk -F '|' '{sub(/^\|/, "NA|"); gsub(/\|\|/, "|NA|"); print $1, $2, $3}' file
111 NA aa1
NA bbb aa2
333 ccc NA
444 ddd NA
555 eee aa5
另一个变体:
awk -F '|' '{for(i=1; i<=3; i++) if ($i=="") $i="NA"; print $1, $2, $3}' file
111 NA aa1
NA bbb aa2
333 ccc NA
444 ddd NA
555 eee aa5
答案 1 :(得分:4)
$ awk -F'|' '{print f(1), f(2), f(3)} function f(n){return ($n=="" ? "NA" : $n)}' file
111 NA aa1
NA bbb aa2
333 ccc NA
444 ddd NA
555 eee aa5
答案 2 :(得分:1)
我认为没有惯用的方法,但是您可以使用三元运算符将其缩短一点:
awk -F'|' '{n="NA";print ($1!=""?$1:n),($2!=""?$2:n),($3!=""?$3:n)}' file.txt
输出:
111 NA aa1 NA bbb aa2 333 ccc NA 444 ddd NA 555 eee aa5
答案 3 :(得分:1)
另一个awk
awk -F'|' '{for(i=1;i<NF;i++)$i=$i!=""?$i:"NA";NF-=2}1' file
111 NA aa1
NA bbb aa2
333 ccc NA
444 ddd NA
555 eee aa5
最好添加一些括号:
awk -F'|' '{for(i=1;i<NF;i++)($i=$i!=""?$i:"NA");NF-=2}1' file