AWK
Introducción
Este só será un artigo onde ir recollendo usos e exemplos de AWK, polo que irá mudando con novos contidos co tempo.
Según a Wikipedia: “é unha linguaxe de programación deseñada para procesar datos baseados en texto, xa sexan ficheiros ou fluxos de datos.”
Usos
-
Completar N díxitos nunha lista de números
No traballo tiña unha lista de varios centos de códigos enviados por outro departamento. Estes códigos deberon copialos dun Excel, e pegalos no txt que me enviaron. Os códigos tiñan entre tres e cinco díxitos, cando deberían ter oito.
awk '{printf "%08d\n", $1}' ficheiro_entrada.txt > ficheiro_saida.txt
- Explicación:
- awk: o commando.
- printf: permite formatear a saída, igual que en C.
- %08d: especifica o formato
- 08: encherá con díxito 0 á esquerda, ata ter un total de 8 díxitos na cadea.
- d: indica que agarda un número enteiro.
- \n: engade un salto de liña despois de imprimir cada liña.
- $1: o primeiro campo de cada liña. AWK divide a liña automáticamente en campos separados por espazos ou tabuladores.
- Exemplo, o primeiro é o ficheiro de entrada, o segundo sería a saída:
123 11234 4332
00000123 00011234 00004332
- Explicación:
-
Converter CSV en SQL
Outro departamento envioume unha lista de productos a actualizar, era unha lista bastante grande. Así que o máis cómodo era transformar esa lista a un conxunto de SQLs. Cada liña do CSV era algo como
id;novo valor;outros datos que non me interesan
awk -F';' '{print "UPDATE taboa t SET campo = \x27"$2"\x27 WHERE id = UUID_TO_BIN(\x27"$1"\x27);"}' entrada.csv > saida.sql
Explicación:
-F';'
: indica que o separador de columnas é o punto e coma\x27
: é a comilla simple, para evitar problemas ao estar dentro doutras comillas simples, escapalas non funcionaba correctamente.
-
Printf
Cando usamos printf temos a opción de sustituír variables. Por exemplo se queremos ler dun CSV, para transformalo en SQL, como no caso anterior.
awk -F';' '{printf "UPDATE taboa t SET campo = \x27%d\x27 WHERE id = UUID_TO_BIN(\x27%d\x27);", $2, $1}' entrada.csv > saida.sql
O que hai que ter en conta, en casos coma este, é que se usamos
%d
estamos a indicar que o valor será númerico. Co que se quixésemos utilizar unha cadea como 00123456, sería mellor usar%s
. Doutro xeito perderíamos os ceros iniciais.
Artigos Relacionados:
- Eliminar liñas nun ficheiro con sed
- Cómo crear un live USB dende a terminal
- Engadir tarefas a Systemd
- Copiar a saída do terminal ao portapapeis
- Controlar la temperatura del equipo con bash y telegram
- Instalar Fedora con BTRFS, cifrado e Snapshots activos
- Mudar as DNS en Fedora
- Distrobox
- Instalar Fedora en VirtualBox
- Eliminar liñas nun ficheiro con sed
- Cómo crear un live USB dende a terminal
- Engadir tarefas a Systemd
- Copiar a saída do terminal ao portapapeis
- Configurar acceso SFTP a un directorio
- Inicio de sesión automático en Alpine linux
- Crear un usuario con permisos restrinxidos para backups
- error: gpg failed to sign the data
- Xestionar varias claves ssh
- Cómo instalar Traefik con docker
- Configurar sshfs para acceder al sistema de ficheros de forma segura
- Securizar sudo no noso sistema
- Cómo instalar Raspberry OS
- Instalando docker en modo rootless en Debian
- Configuración e uso de GPG en linux