2010-12-09 34 views
1

Je suis nouveau sur awk et bash. J'essaye de faire du formage pour plusieurs fichiers différents. Mais je ne comprends pas ce que je veux. Le signe $ ne passe pas correctement, j'ai essayé avec $, \, "", la commande -v chr = "$". Mais depuis que je connais peu je ne comprends vraiment pas pourquoi ne fonctionne pas:

THXS !!

cat<< END2> par.tem 
cat<< END> temp 
awk '{ 
if ($5 == "1") 
val = 202 
else if ($5 == "4") 
val = 300 
else 
val =$5 ; 
if (NR > 8 && $6 < 9999) 
printf "%14.3f%14.3f%12.3f%12d%12.5f\n", $1, $2, $3, val, $6  
}' sbrt_202_300_xyz.out > sbrt_au_202_300_xyz.asc 
END 
bash temp 
END2 

sed -e "s/RX1/202/g" -e "s/RX2/300/g" -e "s/NUM1/1/g" \ 
    -e "s/NUM2/4/g" par.tem > run-temp 
bash run-temp 

Répondre

4

Vous devez utiliser la transmission de variables pour convertir les variables shell en variables AWK.

awk -v "awkvar=$shellvar" '{print $awkvar}' file 

pour imprimer le champ awkvar-th, par exemple.

De même:

awk -v "awkvar=$1" '{print $awkvar}' file 
+0

@John: Ce sont sur le terrain qui spécificateurs ont besoin d'signes dollar, voir « pour imprimer le champ awkvar-e, par exemple » dans ma réponse. –

+0

Mon erreur. Avoir un upvote! –