Shell programando tres espadachines awk
Una introducción a las herramientas awk
Awk es un lenguaje de programación, utilizado principalmente para procesar texto y datos en linux / unix, y es una herramienta en linux / unix. Los datos pueden provenir de una entrada estándar, uno o más archivos o la salida de otros comandos.
La forma en que Awk procesa texto y datos: escanee el archivo línea por línea, desde la primera línea hasta la última línea por defecto, busque líneas que coincidan con un patrón específico y realice las operaciones que desee en estas líneas.
Awk representa la primera letra del apellido del autor. Porque su autor son tres personas, a saber, Alfred Aho, Brian Kernighan, Peter Weinberger.
Gawk es la versión GNU de awk, que proporciona algunas extensiones de Bell Labs y GNU.
El awk que se presenta a continuación se basa en el gawk de GNU. En el sistema Linux, awk se ha vinculado a gawk, por lo que awk se presenta a continuación.
El papel de las herramientas awk
1. Awk se usa para procesar archivos y datos. Es una herramienta similar a Unix y un lenguaje de programación
. 2. Se puede usar para estadísticas, como visitas a sitios web, visitas de IP, etc.
3. Juicio de condición de soporte, Soporte para y while loop
Tres formatos de sintaxis awk
awk opción 'parte de comando' nombre de archivo
Nota:
Para citar variables de shell, use comillas dobles para provocar la
introducción de opciones comunes:
-F define el símbolo de separación de campo, el separador predeterminado es espacio
-v define la variable y asigna un valor
3.1 awk variables internas de uso común
variable | Descripción de variable | Observaciones |
---|---|---|
$ 0 | Toda la línea de la línea de procesamiento actual | |
$ 1, $ 2, $ 3… $ n | Diferentes campos en el archivo separados por símbolos de intervalo | awk -F: '{imprimir $ 1, $ 3}' |
NF | Número de campos en la línea de procesamiento actual | awk -F: '{imprimir NF}' |
$ NF | última fila | $ (NF-1) significa la penúltima columna |
FNR / NR | El número de línea de la línea de procesamiento actual | |
FS | Definir espaciador | 'BEGIN {FS = ":"}; {imprimir $ 1, $ 3}' |
OFS | Defina el separador de campo de salida, el espacio predeterminado | 'EMPEZAR {OFS = "\ t"}; imprimir $ 1, $ 3}' |
RS | Ingrese el separador de registros, salto de línea predeterminado | 'BEGIN {RS = "\ t"}; {imprimir $ 0}' |
ORS | Separador de registros de salida, salto de línea predeterminado | 'BEGIN {ORS = "\ n \ n"}; {imprimir $ 1, $ 3}' |
3.2 Ejemplos de variables internas de uso común
# awk -F: '{print $1,$(NF-1)}' 1.txt
# awk -F: '{print $1,$(NF-1),$NF,NF}' 1.txt
# awk '/root/{print $0}' 1.txt
# awk '/root/' 1.txt
# awk -F: '/root/{print $1,$NF}' 1.txt
root /bin/bash
# awk -F: '/root/{print $0}' 1.txt
root:x:0:0:root:/root:/bin/bash
# awk 'NR==1,NR==5' 1.txt
# awk 'NR==1,NR==5{print $0}' 1.txt
# awk 'NR==1,NR==5;/^root/{print $0}' 1.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
Cuatro usos avanzados de awk
4.1 1. Impresión de salida formateada e printf
print函数 类似echo "hello world"
# date |awk '{print "Month: "$2 "\nYear: "$NF}'
# awk -F: '{print "username is: " $1 "\t uid is: "$3}' /etc/passwd
printf函数 类似echo -n
# awk -F: '{printf "%-15s %-10s %-15s\n", $1,$2,$3}' /etc/passwd
# awk -F: '{printf "|%15s| %10s| %15s|\n", $1,$2,$3}' /etc/passwd
# awk -F: '{printf "|%-15s| %-10s| %-15s|\n", $1,$2,$3}' /etc/passwd
awk 'BEGIN{FS=":"};{printf "%-15s %-15s %-15s\n",$1,$6,$NF}' a.txt
%s 字符类型 strings %-20s
%d 数值类型
占15字符
- 表示左对齐,默认是右对齐
printf默认不会在行尾自动换行,加\n
4.2 definición de variable awk
# awk -v NUM=3 -F: '{ print $NUM }' /etc/passwd
# awk -v NUM=3 -F: '{ print NUM }' /etc/passwd
# awk -v num=1 'BEGIN{print num}'
1
# awk -v num=1 'BEGIN{print $num}'
注意:
awk中调用定义的变量不需要加$