Archives de catégorie : AWK

Interagir avec l’utilisateur via un prompt – Awk

Awk  c’est bien et je l’ai déjà dit on le sous exploite souvent. Il permet souvent de manipuler des fichier notamment des tableaux. Mais bon Awk c’est aussi un language assez complet qui permet de faire des programmes plus étendus et pas que des one-liners.

Le truc bête est méchant c’est de commencer par interagir avec l’utilisateur. Par exemple on va lui poser une question et afficher la réponse. En gros c’est du awk pour les nuls.

Voici comment faire :

#!/usr/bin/awk

BEGIN{
        printf("Entrez votre prénom: ");
        getline nom < "-"
        print "Bonjour "nom" !"
}


Donc tout se devine:

  • on oublie pas de préciser la localisation du programme
  • on utilise le BEGIN (début de fichier ou en-tête)
  • on affiche une invite
  • on récupère le contenu rentré par le user et on le sotck dans la variable nom
  • et on affiche le résultat

Et on exécute façon awk :

└─ $ ▶ awk -f prompt.awk 
Entrez votre prénom: xavki
Bonjour xavki !

photo of person holding h cutout decor

Photo by rawpixel.com on Pexels.com

[AWK] : comment utiliser une variable shell dans awk ?

Awk est  un language bien sympa mais parfois on hésite à l’utiliser car il faut se prendre la tête à lui faire asser des variables. Du coup on tort le truc dans tous les sens alors qu’il suffit parfois de récupérer les variables shell pour les réutiliser dans awk.

Je vous propose deux options mais j’ai une grosse préférence pour la première.

La première c’est d’uliser l’option -v :

└─ $ ▶ variable="toto";awk -v var="$variable" 'BEGIN {print var}'
toto


La seconde en lui passant une variable d’environnement avec ENVIRON :

└─ $ ▶ variable=toto awk 'BEGIN {print ENVIRON["variable"]}'
toto


[AWK] : créer un serveur web minimaliste

Dans un post précédent, nous avions vu comment lancer un serveur web en python. Cela ne prenait qu’une seule ligne par les miracles de python.

Mais saviez vous qu’avec AWK vous pouviez faire pareil ? c’est fou non ? ben oui c’est possible mais attention cela ne se fait pas en une seule ligne (ou sinon elle sera bien loin du one-liner).

#!/usr/bin/gawk -f
BEGIN {
if (ARGC < 2) { print "Usage: wwwawk  file.html"; exit 0 }
	Concnt = 1;
        while (1) {
        RS = ORS = "\r\n";
        HttpService = "/inet/tcp/8080/0/0";
        getline Dat < ARGV[1];
        Datlen = length(Dat) + length(ORS);
        while (HttpService |& getline ){
		if (ERRNO) { print "Connection error: " ERRNO; exit 1}
                print "client: " $0;
                if ( length($0) < 1 ) break;
        }
        print "HTTP/1.1 200 OK"             |& HttpService;
        print "Content-Type: text/html"     |& HttpService;
        print "Server: wwwawk/1.0"          |& HttpService;
        print "Connection: close"           |& HttpService;
        print "Content-Length: " Datlen ORS |& HttpService;
        print Dat                           |& HttpService;
        close(HttpService);
        print "OK: served file " ARGV[1] ", count " Concnt;
        Concnt++;
      }
} 

 

Après avoir créé votre fichier donnez lui les droits qui vont bien (755) par exemple et créez une fichier file.html. Lancez le script et rendez vous sur votre localhost:8080 et le fichier sera servi.

Je trouve ça trop fort quand même. Pas vous ?

Source : bon article de tuxgraphics

[Bash][AWK] : Lister les commandes le top de vos commandes

L’historique de Linux est utilisable via le binaire « history » ou avec un simple vi de « .bash_history ». Mais on l’utilise plus régulièrement à l’aide de la commande ctrl+r en tapant les mots à rechercher dans votre historique. Un bon moyen pour relancer une commande déjà utilisée.

Mais on peut faire d’autres choses avec notamment avoir un vrai système de log de l’historique avec la mise en place d’un archivage de vos commandes. On reverra cela plus tard.

person writing on notebook

Photo by Lukas on Pexels.com

Utiliser les statistiques de votre historique c’est aussi un bon moyen de voir ce que vous faites le plus souvent. Et du coup vous pouvez y trouver de bonnes idées pour créer les alias les plus adéquates pour gagner en performance devant votre clavier.

Un bon moyen pour faire ces statistiques :

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

Donc :

  • on lance history pour travailler dessus
  • on utilise awk pour dresser la liste des top commandes
  • on ordonne le tout avec un sort