J'ai le code suivant dans un fichier nommé awktest1.awk
:
#!/bin/awk -f
BEGIN{print "start"}
{print $2, "\t", $5}
END{print "end"} employee.txt
où employee.txt
contient les données suivantes:
100 Thomas Manager Sales $5,000
200 Jason Developer Technology $5,500
300 Sanjay Sysadmin Technology $7,000
400 Nisha Manager Marketing $9,500
500 Randy DBA Technology $6,000
J'exécute la awk
commande en tant que:
awk -f awktest1.awk
mais il imprime juste start
et ne se termine pas. Quelqu'un peut-il m'aider avec ce que je fais mal ici?
shell-script
awk
Saket Agarwal
la source
la source
print $2, "\t", $5
contrairement àprint $2 "\t" $5
, vous écrivez le 2ème champ suivi par OFS (espace), TAB, OFS et le 5ème champ.Réponses:
L'erreur donne le nom de fichier à traiter dans le script; vous devez supprimer
employee.txt
du script et l'exécuter comme suitou même, si le script est exécutable,
Le script devient
En l'état,
awk
attend l'entrée de l'entrée standard au lieu de la lecture d'un fichier. Voilà pourquoi ça ne finit jamais ...la source
Pour compléter la réponse de @ Stephen , si vous vouliez coder en dur le nom du fichier d'entrée dans le
awk
script, vous écririez:Pour plusieurs fichiers:
la source
Ou si vous ne voulez pas passer le nom
employee.txt
de fichier comme argument de ligne de commande, vous pouvez faire quelque chose comme ceci:Code:
la source