| 1 | $ echo - | awk -v "S=73180" '{printf "%02d:%02d:%02d",S/(60*60),S%(60*60)/60,S%60}' | 
Al ejecutar el comando anterior, trasformaremos 73180 segundos, el resultado sera el siguiente :
| 1 | 20:19:40 | 
| 1 | $ echo - | awk -v "S=73180" '{printf "%02d:%02d:%02d",S/(60*60),S%(60*60)/60,S%60}' | 
Al ejecutar el comando anterior, trasformaremos 73180 segundos, el resultado sera el siguiente :
| 1 | 20:19:40 | 
| 1 2 3 4 5 6 7 8 | #!/bin/bash PASSWORD_FILE=/etc/passwd n=1       #Numero de usuario for name in $(awk 'BEGIN{FS=":"}{print $1}' < "$PASSWORD_FILE") do       echo "USER #$n = $name"       let "n += 1" done | 
El IFS (Input Field Separator) es una variable global cuyo valor es el carácter o caracteres que funcionan como delimitador para separar un valor de otro en la línea leída. Podemos imprimir el valor del IFS con el siguiente comando:
| 1 2 3 | $ cat -et <<<"$IFS"  ^I$ $ | 
Como podemos ver, el IFS por defecto es cualquiera de:
Pero en ocasiones, podemos tener como valor de una variable una secuencia de valores unidos por otro tipo de separador (una coma, dos puntos, etc…)
Cambiando temporalmente el valor del IFS, podemos utilizar el comando «read» para descomponer este valor en los valores individuales de que consta.
Por ejemplo, supongamos que tenemos que procesar una línea en el formato del fichero /etc/passwd
| 1 | linea="miusuario:x:1002:1002::/home/miusuario:/bin/sh" | 
Comenzamos por guardar el valor de la variable IFS, para poder recuperarlo más tarde, y asignar temporalmente el carácter «:» como separador
| 1 2 | IFS_anterior="$IFS" IFS=: | 
Con esto, podemos descomponer el valor de la línea en los campos de que consta, con el comando «read»:
| 1 | read usuario clave uid gid info home shell <<< "$linea" | 
Y por último, volvemos a asignar a IFS el valor que tenía previamente:
| 1 | IFS=»$IFS_anterior» | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #!/usr/bin/env bash readonly connections="                       192.168.1.4/24|tcp|22                       192.168.1.4/24|tcp|53                       192.168.1.4/24|tcp|80                       192.168.1.4/24|tcp|139                       192.168.1.4/24|tcp|443                       192.168.1.4/24|tcp|445                       192.168.1.4/24|tcp|631                       192.168.1.4/24|tcp|5901                       192.168.1.4/24|tcp|6566 " function set_connections() {     local range proto port     for fields in ${connections[@]}     do             IFS=$'|' read -r range proto port <<< "$fields"             echo "$range - $proto - $port"     done } set_connections | 
Al ejecutar este SCRIPT obtendremos el siguiente resultado. En esta ocasión se definió los valores dentro de una variable, también se puede definir un ARRAY o leer directamente de un archivo. Los usos quedan a la imaginación.-
| 1 2 3 4 5 6 7 8 9 | 192.168.1.4/24 - tcp - 22 192.168.1.4/24 - tcp - 53 192.168.1.4/24 - tcp - 80 192.168.1.4/24 - tcp - 139 192.168.1.4/24 - tcp - 443 192.168.1.4/24 - tcp - 445 192.168.1.4/24 - tcp - 631 192.168.1.4/24 - tcp - 5901 192.168.1.4/24 - tcp - 6566 | 
Para obtener todos los archivos ejecutables en tu sistema, puedes recorrer los directorios en la variable PATH.
| 1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/bash backIFS=$IFS IFS=: for dir in $PATH; do         echo " DIRECTORIO : $dir"         for myfile in $dir/*; do                 if [ -x $myfile ]; then                         echo " $myfile"                 fi         done done IFS=$backIFS |