awk – Affiche la dernière valeur de la colonne avec la valeur par défaut si null

J’utilise la commande awk pour imprimer les valeurs. Pour la dernière colonne, si aucune valeur n’est trouvée, j’en ai besoin pour imprimer «NA».

Ex., Dans le code ci-dessous, quand $ 3 est NULL, je dois imprimer comme “NA”.

Y at-il de toute façon je pourrais inclure une condition «si» / «nul» ou quelque chose. S’il vous plaît aider.

awk -F" " '{ print $1,"|", $2, "|", $3 }' log_temp.txt > log_template.txt 

Y at-il de toute façon je pourrais inclure une condition «si» / «nul» ou quelque chose. S’il vous plaît aider.

Vous devez utiliser un opérateur ternaire

Syntaxe:

 condition ? value_if_true : value_if_false 

Pour la 3ème colonne

 awk '{ print ($3==""?"NA":$3) }' infile 

donc ça devient

 awk '{ print $1, "|" , $2, "|", ($3==""?"NA":$3) }' infile 

Vous pouvez également définir la variable de séparateur de champ de sortie ( OFS )

 awk -v OFS='|' '{ print $1, $2, ($3=="" ? "NA" : $3) }' infile 

print ($3=="" ? "NA" : $3) est identique à

 if( $3=="" ){ print "NA" }else{ print $3 } 

Pour la dernière colonne, vous pouvez utiliser la variable NF qui ne donne aucun champ d’enregistrement, tandis que $NF est la dernière colonne

Vous pouvez utiliser sed pour cette tâche.

Si le délimiteur est ‘4 espaces’ dans le fichier d’entrée.

Vous pouvez définir un var avec le nombre de champs

 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