Awk

De Mon Wiki
Aller à la navigation Aller à la recherche

Convertir des centiemes de secondes en heures, minutes et secondes

Cette commande va convertir la première colonne contenant les centièmes de secondes en heures, minutes et secondes :

printf '18000\n' | \
awk '{s=($1/100); h=int(s/3600); s=s-(h*3600); m=int(s/60); s=s-(m*60); \
printf("%02d:%02d:%02d\n", h, m, s) }'

Résultat :

00:03:00

Ou

printf '18000\n' | \
awk '{s=($1/100); h=int(s/3600); s=s-(h*3600); m=int(s/60); s=s-(m*60); \
printf("%02d heure(s) %02d minute(s) %02d seconde(s)\n", h, m, s) }'

Résultat :

00 heure(s) 03 minute(s) 00 seconde(s)

Convertir des secondes en jours, heures, minutes et secondes

printf "100000" | \
awk '{t=$1; d=int(t/60/60/24); h=int(t/60/60%24); m=int(t/60%60); s=int(t%60); \
printf "%d %02d:%02d:%02d\n", d, h, m, s}'

Résultat :

1 03:46:40

Ou

printf "100000" | \
awk '{t=$1; d=int(t/60/60/24); h=int(t/60/60%24); m=int(t/60%60); s=int(t%60); \
printf "%d jour(s) %02d heure(s) %02d minute(s) %02d seconde(s)\n", d, h, m, s}'

Résultat :

1 jour(s) 03 heure(s) 46 minute(s) 40 seconde(s)

Convertir une date au format Timestamp

La commande

date --date="20020103 21:30:02" +"%s"

, affichant la date du 3 janvier 2002 à 21:30:02 au format timestamp, n'est parfois pas disponible sur certains Unix, il est donc possible de se rabattre sur une commande awk qui donnera le même résultat :

printf "2002 01 03 21 30 02\n" | awk '{print mktime($0)}'

Connaitre la longueur de chaque ligne d'un fichier

L'option length de awk, nous permet de connaitre la longueur de chaque ligne d'un fichier. En remplaçant $0, par le champs concerné (par exemple $1, $2...), nous pouvons connaitre la longueur d'un champ particulier.

awk '{printf "%d\n",length($0)}' /chemin/vers_fichiers

Nous pouvons aussi y rajouter le numéro de la ligne devant chaque longueur, ce qui pourrais donner :

awk '{printf "%d-%d\n",NR,length($0)}' /chemin/vers_fichiers

Rajouter des blancs (espace) en fin de chaque ligne

Pour diverses raisons, il peux être parfois intéressant d'avoir des longueurs de ligne toujours identique. Voici un exemple qui générera des lignes qui font toujours 250 caractères de long.

awk '{printf "%-250s\n",$0}' /chemin/vers_fichiers