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