J'essaie d'imprimer à partir d'un fichier en utilisant awk, mais ma sortie est vide. Voici mon code jusqu'à présent
accountNum=$1
while read -r LINE || [[ -n $LINE ]] ; do
awk -F',' '{ if($1==accountNum) { print $3.$2 } }' Accounts
done < Accounts
J'ai également essayé ceci:
accountNum=$1
while read -r LINE || [[ -n $LINE ]] ; do
echo $LINE | awk -F',' '{ if($1==accountNum) { print $3.$2 } }'
done < Accounts
Le fichier d'entrée est:
1,Doe,John
2,Rooney,Wayne
3,Smith,Will
4,Crow,Russel
5,Cruise,Tom
La sortie attendue lorsque j'exécute le fichier est
$./file.sh 3
Will Smith
Mais je reçois ce qui suit
$./file.sh 3
$
Ce n'est rien qui est imprimé. Je connais la solution avec cut, mais je veux utiliser awk.
while
boucle? :)Votre script fait déjà pratiquement le travail sans aucun
awk
:Je ne dis pas que c'est une solution meilleure ou plus efficace que l'utilisation
awk
seule, mais si vous voulez lawhile...read
boucle, cela bat certainement desawk
processus distincts pour chaque ligne. Juste un FYI, je suppose.la source
Avec
-v a="$1"
nous définissons laawk
variablea
sur la valeur du premier argument de ligne de commande du script, nous spécifions alors que l'entrée est séparée par des virgules-F ','
. Si la première colonne est égale à la valeur dea
, imprimez les deux autres colonnes dans l'ordre inverse.Vous n'obtenez rien dans votre sortie lorsque vous comparez la première colonne à la
awk
variableaccountNum
, qui n'est pas définie.S'il y avait eu une entrée dont la première colonne avait 0 (zéro), cette entrée aurait été imprimée. En effet, la valeur des variables non définies dans est
awk
évaluée à zéro.la source