[Linux] Uso simples do comando awk

Introdução

Awk é uma poderosa ferramenta de processamento de texto desenvolvida pelo projeto GNU. É usado principalmente para ler a entrada (geralmente um arquivo de texto), combinar cada linha de acordo com certas condições e, em seguida, executar operações especificadas nas linhas correspondentes.

Uso básico

awkO uso básico é o seguinte:

# 格式
$ awk 动作 文件名

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

No exemplo acima, demo.txté awko arquivo de texto a ser processado. Há uma chave dentro da aspa simples anterior, que contém a ação de processamento para cada linha print $0. Entre eles printestá o comando print, $0que representa a linha atual, portanto o resultado da execução do comando acima é imprimir cada linha como está.

A seguir, primeiro usamos a entrada padrão (stdin) para demonstrar o exemplo acima.

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

No código acima, print $0a entrada padrão é this is a testreimpressa.

awkCada linha será dividida em vários campos baseados em espaços e tabulações, utilizando $1, $2, $3para representar o primeiro campo, o segundo campo, o terceiro campo e assim por diante.

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

No código acima, $3representa this is a testo terceiro campo a.

Abaixo, a título de exemplo, salvamos /etc/passwdo arquivo 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

O delimitador de campo deste arquivo é dois pontos ( :), então você precisa usar -Fo parâmetro para especificar o delimitador como dois pontos. Então, seu primeiro campo pode ser extraído.

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

variável

Além dos $ + números que representam um campo, awktambém são fornecidas diversas outras variáveis.
A variável NFindica quantos campos existem na linha atual, portanto $NFrepresenta o último campo.

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

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

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

No código acima, printa vírgula no comando significa que na saída, um espaço é usado para separar as duas partes.

A variável NRindica qual linha está sendo processada no momento.

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

No código acima, printno comando, se os caracteres forem exibidos como estão, eles deverão ser colocados entre aspas duplas.

awkAs outras variáveis ​​integradas são as seguintes.

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

Acho que você gosta

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