Je suis curieux de définir les options de ligne de commande dans le script AWK, comme -f pour le séparateur de champ. J'essaie d'écrire la ligne Shebang comme et obtenir l'erreur suivante: p> pour cet exemple, je peux faire avec p> Mais je veux toujours savoir un moyen de définir toutes ces options. Merci d'avance. P> EDIT: P> Utilisez un autre exemple qui devrait être facile à tester.
INPUTFILE: P> ./test.awk inputfile
3 Réponses :
Disons que la suite est notre INPUT_FILE, que nous allons utiliser pour toutes les solutions mentionnées ici.
/usr/local/bin/awk -v FS=',' -f file.awk Input_file
Merci pour votre réponse. Maintenant que je peux soit attribuer à FS dans le fichier de script ou passer comme argument de ligne de commande. Je peux également utiliser une option de ligne de commande -f. Ma question est que puis-je utiliser -f option dans mon script plutôt que dans la ligne de commande? Si je peux, comment dois-je le faire?
@Zhu, oui, vous pouvez faire dans la section commencer code>, j'ai fourni 4 options pour la définir, veuillez les vérifier et le savoir savoir si vous trouvez des questions sur elles-mêmes?
Ces voies vont bien, mais à l'exception de la 3ème façon qui utilise l'option -f, d'autres moyens d'utiliser la variable FS. Ma question, en fait, est de savoir si je peux utiliser des options de ligne de commande dans le script, comme -m pour Bignum, -w pour GAWK-OPT et ainsi de suite. Je pense que cela n'est que l'une de ces options qui se produisent pour pouvoir être substituées par une variable FS?
@Zhu, je n'ai pas utilisé ces options mais si -f code> est autorisé, alors ceux-ci devraient également être essaisez la mine 4ème option Utilisez
-v code> pour ces options et essayez-la une fois? Je ne peux pas le tester car j'ai besoin d'avoir un cas d'utilisation pour cela. Lemme sait comment ça se passe?
J'ai modifié la question et ajouté un exemple. Je pense que la façon dont vous avez mentionné a besoin d'une variable AWK correspondant à l'option?
@Zhu, je ne suis pas sûr de savoir pourquoi vous utilisez -d code> ici lorsque j'exécute
/ usr / local / bin / awk -f fichier.awk input_file code> Ça fonctionne bien pour moi .
Pas de raison spécifique, juste pour tester les options AWK. Utiliser -d [FileName] générera un fichier contenant des fichiers globaux AWK. Si le nom de fichier n'est pas spécifié, ce sera «awkvars.out». Sûrement rien ne va mal sans cela, je veux juste trouver un moyen de spécifier des options dans le fichier de script et c'est un exemple.
@Zhu, honnêtement, je n'ai pas encore exploré cette option, mais votre script doit fonctionner simplement en faisant simplement / USR / local / bin / awk -f fichier.awk input_file code> où
fichier.awk < / code> est d'avoir un code AWK.
N'utilisez jamais de shebang pour appeler awk car il vous vole de la capacité de séparer les arguments de shell dans des arguments AWK et des variables AWK et faire autre chose qui est mieux fait dans Shell (par exemple, à l'analyse de getopts) avant d'appeler awk. Appelez simplement Awk à l'intérieur de votre script Shell. P>
Aussi, ne nommez pas votre script shell test.awk code> car il s'agit d'un script shell. Le fait que cela soit mis en œuvre dans AWK est sans importance. Il n'y a aucune raison de créer un fichier que vous appelez parfois comme fichier
awk code> pour interpréter awk interpréter et d'autres fois comme juste
fichier code> pour que la coque interpréter. P>
Répondre à la question de la puissance, au-delà du réglage de FS.
Réponse courte: Vous ne pouvez pas utiliser plusieurs options avec '#!', et puisque vous devez raconter AWK de lire le programme de STDIN (-F- ), vous avez du mal de chance. p>
réponse longue: strong> p> Lorsque vous utilisez exécutera compte tenu de cette limitation d'un argument, lors de l'exécution de AWK, le seul paramètre valide et requis est "-f", ce qui indique que l'AWK programme Les béliers sont fournis sur STDIN. Vous pouvez préparer peu d'autres options qui ne prennent aucun argument, par exemple «traditionnel» (par exemple, «-pf-» forcer le comportement de POSIX). P> autant que je peux dire, tout ce que je peux dire, tout le "intéressant "Options (réglage FS, RS, ORS, ...) doit être séparée du" -F- "avec un espace, ce qui rend impossible de les intégrer à la ligne de commande, d'autres utilisateurs de 'Begin {... } 'ou similaire dans le script. p> la ligne de fond, essayer shebang code> (#!), il y a un Limite de l'argument unique (qui est transmise aux programmes nommés comme le 1er argument. Ainsi, en général: p>
/ chemin / à / passer / à / passer / à / PROG1 Code>, avec le contenu du fichier (y compris le premier shebang) disponible en tant que stdin. Il s'agit d'une simplification excessive, les règles réelles sont plus complexes. strong>, voir
#! / usr / bin / awk -f- -f, code> tentera de rechercher du programme est le même que
awk -f '-f' code> et recherchera un fichier nommé '- -F`. Généralement pas très utile et ne définira pas le FS. P> p>
Connexes: multiples arguments à Shebang . Vous pourriez être capable d'utiliser
#! / Usr / bin / env -s awk ... code>.