1.- Mostrar los nombres de login (correspondientes al primer campo o campo1) de TODOS los usuarios del archivo de contraseñas /etc/passwd.
awk -F: '{ print $1}' /etc/passwd
2.- Mostrar los nombres de login, directorios propios y shell de TODOS los usuarios del archivo de contraseñas /etc/passwd (correspondientes a los campos 1, 6 y 7). Mostrarlos separados por "--".
awk -F: -v OFS=" -- " '{ print $1,$6,$7 }' /etc/passwd
otra forma:
awk -F: '{ print $1," -- ",$6," -- ",$7 }' /etc/passwd
3.- Mostrar los nombres de login y directorios propios (correspondientes a los campos 1 y 6) del archivo de contraseñas /etc/passwd de aquellos usuarios cuyo nombre de login empieza con "a".
awk -F: '/^a/ print $1,$6 }' /etc/passwd
otra forma:
awk -F: '{ if ($1~/^a/) print $1,$6 }' /etc/passwd
y otra más:
awk -F: '$1~/^a/ { print $1,$6 }' /etc/passwd
4.- Mostrar solo los registros de usuarios del archivo de contraseñas/etc/passwd que utilizan el shell csh.
awk -F : '$7~"csh" { print $0 }' /etc/passwd
5.- Mostrar solo los registros de usuarios sin privilegios (usuarios con UID >=500) del sistema.
awk -F : '$3>=500 {print $0}' /etc/passwd
6.- Mostrar los registros de usuarios del archivo de contraseñas /etc/passwd para aquellos usuarios cuyo nombre de login empieza con "a" y que utilizan el Shell Bash.
awk -F : '$1~/^a/ && $7~"bash" {print $0}' /etc/passwd
otra forma:
awk -F : '$1~/^a/ && $7=="/bin/bash" {print $0}' /etc/passwd
Para los siguientes ejercicios considere un archivo delimitado, llamadopersonas.txt, con el siguiente formato:
nombre:apellido:número
un registro en este archivo tendría, por ejemplo, la siguiente forma:
Juan:Perez:25
7.- Mostrar TODOS los registros cuyo nombre sea “Francisco” del archivo
personas.txt.
awk –F: '/^Francisco/ { print $0 }' personas.txt
otra forma:
awk –F: '{ if ($1=="Francisco") print $0}' personas.txt
y otra más:
awk –F: '{ $1=="Francisco" { print $0 }' personas.txt
8.- Mostrar TODOS los registros cuyo apellido sea “Pérez” del archivo personas.txt.
awk –F: '/Perez/ { print $0 }' personas.txt
otra forma:
awk –F: '{ if ($2=="Perez") print $0}' personas.txt
y otra más:
awk –F: '{ $2=="Perez" { print $0 }' personas.txt
9.- Imprimir la cantidad de registros del archivo personas.txt cuyo nombre sea “Juan”.
awk –F: '{ if ($1=="Juan") x++} END { print x}' personas.txt
otra forma:
awk –F: '$1=="Juan" { x++ } END { print x }' personas.txt
y otra más:
awk –F: 'BEGIN {x=0} { if ($1=="Juan") x++ }; END { print x }'personas.txt
10.- Imprimir TODOS los registros del archivo personas.txt con su correspondiente número de registro.
awk –F: '{ print NR,$0 }' personas.txt
AWK es extremadamente útil a la hora de procesar búsquedas en archivos y flujos de datos, dentro de estos últimos podemos considerar la salida (o el output) de comandos como el ls, who, date, ps, entre muchísimos más. Es importante recordar aquí, que el delimitador por defecto de AWK es el “espacio en blanco”.
11.- Mostrar los usuarios actualmente conectados al sistema y su hora de conexión.
who | awk '{ print $1,$4 }'
12.- Mostrar la fecha en formato día mes año.
date | awk '{ print $3,$2,$6 }'
13.- Mostrar la hora del sistema.
date | awk '{ print $4 }'
14.- Mostrar TODOS los archivos del directorio actual cuyo nombre empieza con"a".
ls | awk '/^a/'
otra forma:
ls | awk '$1~/^k/ { print $1 }'
15.- Mostrar los permisos ($1) y nombre de los archivos ($9) del directorio actual.
ls -l | awk '{ print $1,$9 }'
16.- Mostrar los campos del 1 al 5 del listado que proporciona ls –l.
ls -l | awk '{ for (x=1; x<=5; x++) { printf "%s ", $x } printf "\n" }'
17.- Mostrar el listado de todos los archivos vacíos del directorio actual.
ls -l | awk '$5==0'
otra forma:
ls | awk '$5==0 { print $9 }'
18.- Mostrar el listado de todos los archivos NO vacíos del directorio actual.
ls -l | awk '$5>0'
19.- Listar el contenido de los archivos del directorio actual cuyo nombre empieza con "a".
ls | awk '{ /^a/ { print $1 }' | awk '{ print "cat "$1 }' | bash
otra forma:
ls | awk '{ if ($1~/^a/) print $1 }' | awk '{ print "cat "$1 }' | bash
20.- Sumar los tamaños de todos los archivos del directorio actual
ls -l | awk '{ sum+=$5} END {print sum}'
21.- Sumar los tamaños de todos los archivos del directorio actual pertenecientes al usuario alumno
ls -l | awk '{ if ($3~"alumno") sum+=$5} END {print sum}'
otra forma:
ls -l | awk '$3=="alumno" { sum+=$5} END {print sum}'
22.- Mostrar un listado de TODAS las carpetas o sub-directorios del directorio actual
ls -l ¦ awk '/^d/ { print $1," ",$9 }'
otra forma:
ls -l ¦ awk '$1~/^d/ { print $1," ",$9 }'
23.- Borrar solo los archivos del directorio actual
ls -l ¦ grep -v drwx ¦ awk '{ print "rm "$9 }' ¦ bash
otra forma:
ls -l ¦ awk '$1!~/^drwx/ { print $9 }' ¦ xargs rm
24.- Mostrar el listado de archivos del directorio actual en mayúsculas
ls ¦ awk '{ print toupper($1) }'
Los archivos de log de RHEL, y de prácticamente TODOS los Linux, se encuentran en el directorio /var/log. Algunos de estos archivos son archivos de texto y por lo tanto pueden ser consultados directamente con AWK (o grep/sed),otros, en cambio, son archivos binarios y se consultan a través de un comando Linux, para luego procesar la salida de dicho comando con AWK.25.- Mostrar las características de la CPU de la máquina
dmesg | awk '/CPU/ {print $0}'
26.- Listar el nombre de los usuarios que NUNCA se han conectado al sistema
lastlog | awk '/**Nunca ha entrado**/ { print $1}'
27.- Mostrar las líneas con Invalid user y el total de ellas del archivo de log/var/log/secure
awk '/Invalid user/ { count++; print $0 } END { print count }'/var/log/secure
28.- Mostrar los ingresos al sistema entre el 1 y 5 de Junio
last | awk '$5 == "Jun" && ($6 >= 1 && $6 <= 5)'
29.- Mostrar las ejecuciones del comando su
awk '/su:/ print}' /var/log/auth.log
30.- Mostrar todos los intentos de conexión al sistema fallidos
awk '/FAILED LOGIN/ {print $0}' /var/log/secure
31.- Matar TODOS los procesos de un determinado tipo (en este ejemplo vamos a “matar” el proceso asociado a la ejecución del editor vi)
ps ax | grep vi | grep –v grep | awk '{ print "kill -9 "$1}' | bash
32.- Mostrar la cantidad de usuarios en el sistema en este instante
w | awk 'BEGIN { cont=0 } NR>2 { cont++ } END { print cont}
otra forma:
w | awk 'NR>2 { cont++ } END { print cont}
33.-Visualiza los campos primero (dia) segundo (mes) y sexto (año). Lo ejecutamosde la siguiente manera.
date | awk '{print ($3"-"$2"-"$6)}'
34. Visualizar las lineas del archivo /etc/passwd que comienzan con el caracter 'd'awk '/^d/' /etc/passwd3. Visualizar los directorios cuyo nombre empieza con letra mayuscula. Selecionaremos las lineasque visualiza el ls -l que empiezan con la letra d y cuyooctavo campo comienza con letra mayuscula.
ls -l /etc/ | awk '$1 ~ /^d/ && $8 ~ /[A-Z]/'
35. Imprimir y ordenar los nombres de ingreso de todos los usuarios:
who | awk '{ FS = ":" }; { print $1 | "sort" }'
cat /etc/passwd | awk '{ nlines++ } { print nlines }'Sed
36. Creemos un archivo llamado 'ensayo' con el siguiente contenido:Las ciencias facticas abordanla realidad de manera particularcada una se ocupa de investigarun campo de la realidad y juntasestudian la realidad en su totalidad
37. Imprimir la linea numero 4 del archivo especificado:
sed 4p ensayo
38.Ahora se visualizara la linea 4, pero sin ser duplicada:
sed -n 4p ensayo
39. Selecciona un rango de direcciones e imprimir las lineas implicadas:
sed -n 2,3 ensayo
40. Realiza una sustitucion de una(s) palabra(s) en todo el archivo
sed 's/abordan/abarcan/g' ensayo
41. Sustituir las vocales minusculas por las mayusculas
sed 'y/[aeiou]/[AEIOU]/' ensayoGrep
42. Veamos las lineas que concuerden con el patron dado (ignorando mayusculasy minusculas)
del archivo xorg.confgrep -i 'xorg' /etc/X11/xorg.conf
43. Imprima las lineas del archivo que empiecen por 'daemon':
grep '^daemon' /etc/passwd
44. Veamos los archivos que empiecen por 'root' del directorio /etc/
grep -l root /etc/*
45. En el siguiente ejemplo buscaremos las lineas que contengan cuatro caracteres
grep "^....$" /etc/fstab
46. Visualicemos las lineas que no concuerden con el patron dado
grep -v 'bash' /etc/passwd | lessFind
47. Encuentre en su directorio personal los directorios que contengan lospermisos en 755
find ~ -perm 755 -print
48. Encuentre en directorio /dev los archivos tipo caracter
find /dev/ -type c -print
49. Encuentre en la ruta especificada los archivos que terminen en .o y en .ko
find /lib/modules/ -iname '*.o' -or -iname '*.ko'
50. Encuentre en el directorio /usr los archivos tipo link simbolico
find /usr/ -type l -print | less
51. Buscar los archivos que no sean accesados los ultimos 30 dias
find /home/ -atime +30 | less
Los arrays son mágicos. Simplemente empieza usando una variable como un array, y se convertirá en array.
#awk '{ a[$1]++ } END { for (i in a) { print i, a[i] } }'
awk '{a[$1]++} END { for (i in a) { print i, a[i] } }'