Awk
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