Preferences du séparateur awk

J'écris des commands awk ad hoc dans cygwin pour traiter les files délimité par des tabulations. Presque chaque command commence par:

BEGIN {FS="\t";OFS="\t";ORS="\r\n";} 

Comment puis-je rendre ces séparateurs par défaut pour éviter de les taper à chaque fois?

La méthode la plus simple consiste probablement à utiliser un alias de shell (ajoutez-le à ~/.bashrc ou l'équivalent de votre shell):

 alias awktab="awk -v FS='\t' -v OFS='\t' -v ORS='\t'" 

Vous pouvez également append un raccourci. Par exemple, pour que Ctrl + G insère awk -v FS='\t' -v OFS='\t' -v ORS='\t' dans votre terminal, ajoutez cette ligne à votre ~/.inputrc :

 Control-G: "awk -v FS='\t' -v OFS='\t' -v ORS='\t'" 

Ensuite, ouvrez un nouveau terminal, tapez Ctrl + G et presto!

Comme POSIX définit les valeurs par défaut des variables spéciales , l'option simple consiste à les replace lors de l'exécution (l'option non simple étant de modifier la source).

Dans le cas de gawk vous pouvez placer votre code commun (généralement dans les blocs BEGIN {} ) dans un file de bibliothèque. Si vous les placez dans le path de la bibliothèque par défaut (probablement /usr/share/awk/ ou /usr/local/share/awk ) ou lorsque la variable d'environnement AWKPATH pointe vers vous, vous n'avez pas besoin d'utiliser le path complet:

 gawk -f tabfile.awk [...] 

Contrairement à d'autres awks, gawk autorise plusieurs options -f , et vous permet de mélanger à la fois -f et la source du programme sur la command line.

Les versions récentes prennent en charge une option de file -i include supplémentaire (depuis gawk-4.1.0) et une directive @include (depuis 4.0.x AFAICT). Ceci est une version un peu plus robuste et conviviale de -f :

 gawk '@include "tabfile"; /foo/ { ... }' 

Ce qui précède inclura tabfile.awk de AWKPATH ou path de la bibliothèque par défaut. @include a été supporté depuis longtime, mais via un igawk un shell-script wrapper à gawk , c'est une fonctionnalité de gawk proprement dite.

Ceci est compatible avec les deux autres bonnes réponses, par exemple:

 alias awktab="gawk -i tabfile" 

Il y a une différence subtile entre l'utilisation de cette approche de file de bibliothèque et l'utilisation de -v sur la command line: l'option de command line prend effet avant l'exécution de tout code awk. Cela peut être important si le code de la bibliothèque utilise de telles variables (par exemple, lire des files de données).