[Linux] Uso simple del comando awk

Introducción

Awk es una poderosa herramienta de procesamiento de texto desarrollada por el proyecto GNU. Se utiliza principalmente para leer la entrada (generalmente un archivo de texto), hacer coincidir cada línea de acuerdo con ciertas condiciones y luego realizar operaciones específicas en las líneas coincidentes.

Uso básico

awkEl uso básico es el siguiente:

# 格式
$ awk 动作 文件名

# 示例
$ awk '{print $0}' demo.txt

En el ejemplo anterior, demo.txtes awkel archivo de texto que se va a procesar. Hay una llave dentro de la comilla simple anterior, que contiene la acción de procesamiento para cada línea print $0. Entre ellos, printse encuentra el comando de impresión, $0que representa la línea actual, por lo que el resultado de la ejecución del comando anterior es imprimir cada línea tal como está.

A continuación, primero utilizamos la entrada estándar (stdin) para demostrar el ejemplo anterior.

$ echo 'this is a test' | awk '{print $0}'
this is a test

En el código anterior, print $0se reimprime la entrada estándar this is a test.

awkCada línea se dividirá en varios campos según espacios y tabulaciones, donde , , representa $1el primer campo, el segundo campo, el tercer campo, etc.$2$3

$ echo 'this is a test' | awk '{print $3}'
a

En el código anterior, $3representa this is a testel tercer campo a.

A continuación, a modo de ejemplo, guardamos /etc/passwdel archivo como demo.txt.

root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

El delimitador de campo de este archivo es dos puntos ( :), por lo que debe utilizar -Fel parámetro para especificar el delimitador como dos puntos. Luego, se puede extraer su primer campo.

$ awk -F ':' '{ print $1 }' demo.txt
root
daemon
bin
sys
sync

variable

Además de $ + los números que representan un campo, awktambién se proporcionan otras variables.
La variable NFindica cuántos campos hay en la fila actual, por lo $NFque representa el último campo.

$ echo 'this is a test' | awk '{print $NF}'
test

$(NF-1)Representa el penúltimo campo.

$ awk -F ':' '{print $1, $(NF-1)}' demo.txt
root /root
daemon /usr/sbin
bin /bin
sys /dev
sync /bin

En el código anterior, printla coma en el comando significa que al generar, se utiliza un espacio para separar las dos partes.

La variable NRindica qué fila se está procesando actualmente.

$ awk -F ':' '{print NR ") " $1}' demo.txt
1) root
2) daemon
3) bin
4) sys
5) sync

En el código anterior, printen el comando, si los caracteres se muestran como están, deben colocarse entre comillas dobles.

awkLas otras variables integradas son las siguientes.

FILENAME:当前文件名
FS:字段分隔符,默认是空格和制表符。
RS:行分隔符,用于分割每一行,默认是换行符。
OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT:数字输出的格式,默认为%.6g。

Supongo que te gusta

Origin blog.csdn.net/u011308433/article/details/132902948
Recomendado
Clasificación