0
votes

Options de ligne de commande définie AWK dans le script

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 xxx pré>

et obtenir l'erreur suivante: p> xxx pré>

pour cet exemple, je peux faire avec p> xxx pré>

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

awk

1 commentaires

Connexes: multiples arguments à Shebang . Vous pourriez être capable d'utiliser #! / Usr / bin / env -s awk ... .


3 Réponses :


0
votes

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


8 commentaires

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 , 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 est autorisé, alors ceux-ci devraient également être essaisez la mine 4ème option Utilisez -v 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 ici lorsque j'exécute / usr / local / bin / awk -f fichier.awk input_file Ç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 fichier.awk < / code> est d'avoir un code AWK.



0
votes

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.

Aussi, ne nommez pas votre script shell test.awk 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 pour interpréter awk interpréter et d'autres fois comme juste fichier pour que la coque interpréter.


0 commentaires

0
votes

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.

réponse longue:

Lorsque vous utilisez shebang (#!), 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: xxx

exécutera / chemin / à / passer / à / passer / à / PROG1 , 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. , voir https://unix.stackexchange.com/questions/87560/does-the-sbang-determine- the-shell-gon-the-script

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).

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.

la ligne de fond, essayer #! / usr / bin / awk -f- -f, tentera de rechercher du programme est le même que awk -f '-f' et recherchera un fichier nommé '- -F`. Généralement pas très utile et ne définira pas le FS.


0 commentaires