Advertisement
ElAguaDeLaFiesta

notas-AWK

Jul 1st, 2022
1,223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Awk 6.96 KB | None | 0 0
  1. Mostrar una determinada columna de información:
  2.  # ls -l | awk '{ print $5 }'
  3.  176869
  4.  12
  5.  4096
  6.  4096
  7.  
  8.  Mostrar varias columnas, así como texto adicional (entre comillas):
  9.  # ls -l | awk '{ print $8 ":" $5 }'
  10.  AEMSolaris7.pdf:176869
  11.  fich1:12
  12.  Desktop:4096
  13.  docs:4096
  14.  
  15.  Imprimir campos en otro orden:
  16.  # awk '{ print $2, $1 }' fichero
  17.  
  18.  Imprimir último campo de cada línea:
  19.  # awk '{ print $NF }' fichero
  20.  
  21.  Imprimir los campos en orden inverso:
  22.  # awk '{ for (i = NF; i > 0; --i) print $i }' fichero
  23.  
  24.  Imprimir última línea:
  25.  # awk '{line = $0} END {print line}'
  26.  
  27.  Imprimir primeras N líneas:
  28.  # awk 'NR < 100 {print}'
  29.  
  30.  Mostrar las líneas que contienen valores numéricos mayor o menor que uno dado:
  31.  # ls -l | awk '$5 > 1000000 { print $8 ":" $5 }'
  32.  
  33.  # ls -l | awk '$5 > 1000000 || $5 < 100 { print $8 ":" $5 }'
  34.  fich1:12
  35.  z88dk-src-1.7.tgz:2558227
  36.  (También hay operaciones &&)
  37.  
  38.  Mostrar la línea con el valor numérico más grande en un campo determinado:
  39.  # awk '$1 > max { max=$1; linea=$0 }; END { print max, linea }' fichero
  40.  
  41.  Mostrar aquellos ficheros cuya longitud es mayor que 10 caracteres:
  42.  # ls -l | awk 'length($8) > 10 { print NR " " $8 }'
  43.  2 AEMSolaris7.pdf
  44.  10 function_keys.txt
  45.  14 notas_solaris.txt
  46.  19 z88dk-src-1.7.tgz
  47.  (Campo $8 -nombrefichero- > 10 caracteres, y numero de record)
  48.  
  49.  Mostrar líneas con más o menos de N caracteres:
  50.  # awk 'length > 75' fichero
  51.  # awk 'length < 75' fichero
  52.  
  53.  Mostrar campos/líneas que cumplan determinadas condiciones entre campos:
  54.  # awk '$2 > $3 {print $3}' fichero
  55.  # awk '$1 > $2 {print length($1)}' fichero
  56.  
  57.  Mostrar y el número de campos de un fichero además de la línea:
  58.  # awk '{ print NF ":" $0 } ' fichero
  59.  
  60.  Mostrar y numerar sólo las líneas no vacías (no en blanco):
  61.  # awk 'NF { $0=++a " :" $0 }; { print }'
  62.  
  63.  Imprimir las líneas que tengan más de N campos:
  64.  # awk 'NF > 5 { print $0 }' fichero
  65.  
  66.  Mostrar el número de línea de cada fichero de una lista iniciando
  67.  desde cero la cuenta de líneas al empezar cada fichero:
  68.  # awk '{print FNR "\t:" $0}' *.txt
  69.  
  70.  Mostrar el número de línea de cada fichero de una lista sin resetear
  71.  la cuenta de líneas al empezar cada nuevo fichero:
  72.  # awk '{print FNR "\t:" $0}' *.txt
  73. Matcheo/Sustitución de cadenas
  74.  Mostrar las líneas que contengan una determinada cadena
  75.  # awk '/cadena/ { print }' fichero
  76.  
  77.  Mostrar las líneas que NO contengan una determinada cadena
  78.  # awk '! /cadena/ { print }' fichero
  79.  
  80.  # ls -l | awk '/4096/ { print $8 ":" $5 }'
  81.    Desktop:4096
  82.    docs:4096
  83.  
  84.  Mostrar todas las líneas que aparezcan entre 2 cadenas:
  85.  # awk '/cadena_inicio/, /cadena_fin/' fichero
  86.  
  87.  Comparaciones exactas de cadenas:
  88.  # awk '$1 == "fred" { print $3 }' fichero
  89.  
  90.  Líneas que contengan cualquier numero en punto flotante:
  91.  # awk '/[0-9]+\.[0-9]*/ { print }' fichero
  92.  
  93.  Busqueda de cadenas en un campo determinado
  94.  # awk '$5 ~ /root/ { print $3 }' fichero
  95.  
  96.  # ls -l | awk '$8 ~ /txt/ { print $8 ":" $5 }'
  97.  apuntes.txt:9342
  98.  function_keys.txt:2252
  99.  notas_solaris.txt:57081
  100.  (Nota, con ~ hemos buscado sólo /txt/ en el campo $8)
  101.  
  102.  Sustituir cadena1 por cadena2:
  103.  # awk '{ gsub(/cadena1/,"cadena2"); print }' fichero
  104.  
  105.  Sustituir 1 por 2 sólo en las líneas que contengan "cadena3".
  106.  # awk '/cadena3/ { gsub(/1/, "2") }; { print }' fichero
  107.  
  108.  Sustituir una cadena en las líneas que no contengan "cadena3".
  109.  # awk '!/cadena3/ { gsub(/1/, "2") }; { print }' fichero
  110.  
  111.  Sustituir una cadena u otra:
  112.  # awk '{ gsub(/cadena1|cadena2/, "nueva"); print}' fichero
  113. Filtrado / Eliminación de información
  114.  Filtrar las líneas en blanco (numero campos ==0):
  115.  # cat file.txt | awk {' if (NF != 0) print $0 '}
  116.  
  117.  Contar número de líneas donde la columna 3 sea mayor que la 1:
  118.  # awk '$3 > $1 {print i + "1"; i++}' fichero
  119.  
  120.  Eliminar campo 2 de cada línea:
  121.  # awk '{$2 = ""; print}' fichero
  122.  
  123.  Eliminar líneas duplicadas aunque sean no consecutivas:lines.
  124.  # awk '!temp_array[$0]++' fichero
  125.  
  126.  Eliminar líneas que tengan una columna duplicada (usando un separador de columna).
  127.  Usamos _ como temp_array. Usamos -F para indicar el separador de columnas.
  128.  En este ejemplo miramos que la columna 3 sea diferente. Es el equivalente de un
  129.  comando "uniq" comparando sólo una columna determinada.
  130.  # awk -F',' '!_[$3]++' fichero
  131.  
  132.  (Se basa en utilizar un array de tipo hash/diccionario temporal donde
  133.  las líneas que aún no han aparecido valen 0, y las que han aparecido !=0)
  134.  
  135.  Saltar 1000 Líneas de un fichero:
  136.  # awk '{if ( NR > 1000 ) { print $0 }}' fichero
  137.  
  138.  Saltar líneas < 10 y > 20:
  139.  # awk '(NR >= 0) && (NR <= 20) { print $0 }'
  140.  
  141. Cálculos de tamaños / longitudes
  142.  Imprimir el número de líneas que contienen una cadena:
  143.  # awk '/cadena/ {nlines = nlines + 1} END {print nlines}' fichero
  144.  
  145.  Sumar todos los tamaños de ficheros de un ls -l, o con una condición:
  146.  # ls -l | awk '{ sum += $5 } END { print sum }'
  147.  3660106
  148.  # ls -l | awk ' $3 == "sromero" { sum += $5 } END { print sum }'
  149.  3660106
  150.  
  151.  Contar número de líneas del fichero:
  152.  # awk 'END {print NR}' infile
  153.  
  154.  Contar el número de líneas vacías de un fichero:
  155.  # awk 'BEGIN { x=0 } /^$/ {x=x+1} END { print "Lineas vacias:", x }' fichero
  156.  
  157.  NOTA: Expandido para leerlo mejor:
  158.     BEGIN { x=0 }
  159.     /^$/  { x=x+1 }
  160.     END   { print "Lineas vacias:", x }
  161.  
  162.  Contar el número de palabras / campos en un fichero:
  163.  # awk '{ total = total + NF }; END { print total+0 }' fichero
  164.  
  165.  Contar el número total de líneas que contienen una cadena:
  166.  # awk '/cadena/ { total++ }; END { print total+0 }' fichero
  167.  
  168.  Imprimir con formato:
  169.  yes | head -10 | awk '{printf("%2.0f", NR)}'
  170.  
  171.  Calcular la suma de todos los campos de cada línea
  172.  # awk '{suma=0; for (i=1; i<=NF; i++) suma=suma+$i; print suma}' fichero
  173.  
  174.  Calcular la suma y la media de todas las primeras columnas del fichero:
  175.  # awk '{ suma += $1 } END { print "suma:", s, " media:", s/NR }
  176. Cambio de IFS (Field Separator)
  177.  Sacar campos 1 y 3 de /etc/passwd:
  178.  # awk -F":" '{ print $1 "\t" $3 }' /etc/passwd
  179.  
  180.  Sacar datos de un fichero CSV separado por comas:
  181.  # awk -F"," '$1=="Nombre" { print $2 }' fichero.csv
  182. Otros
  183.  Tabular líneas con 3 espacios:
  184.  # awk '{ sub(/^/, "   "); print }'
  185.  
  186.  Obtener 1 números aleatorio:
  187.  # awk '{print rand()}'
  188.  
  189.  Generar 40 número aleatorio (0-100) sustituyendo la línea por el número:
  190.  # yes | head -40 | awk '{ print int(101*rand())}'
  191.  
  192.  Generar 40 números aleatorios sólo con awk:
  193.  # awk 'BEGIN { for (i = 1; i <= 40; i++) print int(101 * rand()) }'
  194.  
  195.  Reemplazar cada campo por su valor absoluto:
  196.  # awk '{ for (i=1; i<=NF; i=i+1) if ($i<0) $i=-$i print}' fichero
  197.  
  198.  Definición y utilización de funciones propias (sólo nawk):
  199.  # awk '{for (field=1; field<=NF; ++field)
  200.         {print EsPositivo($field)}};
  201.  
  202.      function EsPositivo(n) {
  203.        if (n<0) return 0
  204.        else     return 1 }'
  205.      
  206.  Partir un mbox en ficheros individuales (Ben Okopnik en Linux Gazzette #175).
  207.  # awk '{if (/^From /) f=sprintf("%%03d",++a);print>>f}' mail_fil
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement