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中调用定义的变量不需要加$

Supongo que te gusta

Origin blog.csdn.net/cenjeal/article/details/108423806
Recomendado
Clasificación