Linux - interceptação coluna em linha com as condições de awk comando complexa

linha de comando awk com coluna truncado condições complexas

Sintaxe do comando : awk  ' Condição 1  {1} a operação  Condição 2  {operação} 2 ... ' filename 
Condições de comando :
 geralmente usando uma expressão relacional como a condição
 x> 10 juízes se a variável x é maior do que 10
 x> = 10 determina se a variável é maior do que é igual a 10
 X <= 10 determina se a variável é inferior ou igual a 10 acção de comando :
 a formatação de saída ({n printf $}, representa a n-ésima coluna; $ n representa o n-ésima coluna)
 controle de fluxo comunicado acção de comando : é um awk comando complexo , executar operações complexas de programação dentro.

exemplo:
[root@192 cut]# cat score.txt
Id	Name	Gender	Score
1	zhangsan	M	90
2	lisi	M	88
3	wangwu	M	98
4	zhaoliu	N	97
5	NangongYi	M	100
Exemplo: A utilização awk formato de saída coluna comando do conteúdo de 2,4
[root@192 cut]# awk '{printf $2 "\t" $4 "\n"}' score.txt
Name	Score
zhangsan	90
lisi	88
wangwu	98
zhaoliu	97
NangongYi	100
[root@192 cut]#
coluna de extracção awk, o qual consiste em extrair a segunda e quarta colunas da primeira fila, e, em seguida, extrai-se a segunda e a quarta coluna da segunda fileira, seguido pela segunda e quarta colunas da terceira fila, até que o fim do texto: Nota.
Exemplo: Eu quero começar o espaço em disco do sistema radicular atual
[root@192 cut]# df -h
文件系统	      容量  已用  可用 已用%% 挂载点
/dev/sda3              17G  2.6G   14G  17% /
tmpfs                 499M     0  499M   0% /dev/shm
/dev/sda1             985M   40M  896M   5% /boot

A、先提取df -h 命令输出的第一行
[root@192 cut]# df -h | grep sda3
/dev/sda3              17G  2.6G   14G  17% /
[root@192 cut]#

B、再提取A结果的第五列
[root@192 cut]# df -h | grep sda3 | awk '{print $5}'
17%
[root@192 cut]#

C、以”%”为分隔符,获取第一个元素
[root@192 cut]# df -h | grep sda3 | awk '{print $5}' | cut -d "%" -f 1
17
[root@192 cut]#
INÍCIO
Papel: a condição, apenas para atender começar esta condição antes de iniciar a execução. Ele disse que antes de qualquer saída, o conteúdo de saída após BEGIN. Em seguida, o processamento de outras ações.
实例: awk 'BEGIN {printf "Isso é novo começar! \ N"} {printf $ 2 "\ t" $ 4 "\ n"}' score.txt
[root@192 cut]# awk 'BEGIN {printf "this is new begin!\n"} {printf $2 "\t" $4 "\n"}' score.txt
this is new begin!
Name	Score
zhangsan	90
lisi	88
wangwu	98
zhaoliu	97
NangongYi	100
[root@192 cut]#
Então comece papel no final é onde? Olhe para baixo: os FS variáveis internas: definir Separador de 
acção: especificar o delimitador


Exemplos: Get todo o usuário não-sistema a partir do arquivo passwd - cat / etc / passwd | grep "/ bin / bash" | awk '{FS = ":"} {printf $ 1 "\ t" $ 3 "\ n"}'
[root@192 cut]# cat /etc/passwd | grep "/bin/bash" | awk '{FS=":"} {printf $1 "\t" $3 "\n"}'
root:x:0:0:root:/root:/bin/bash
user1	500
user2	501
user3	502
[root@192 cut]#
A observação cuidadosa: Descobrimos que a primeira linha também está fora de saída. Por que isso? O original, awk é primeiro lido em uma primeira linha de dados, e em seguida, executar a operação de comando.
Exemplos: Get todo o usuário não-sistema a partir do arquivo passwd, e remover a primeira linha - cat / etc / passwd | grep "/ bin / bash" | awk 'BEGIN {FS = ":"} {printf $ 1 "\ t" $ 3 "\ n"} "
[root@192 cut]# cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}'
root	0
user1	500
user2	501
user3	502
[root@192 cut]#
Nota: 
1, awk separador padrão é capaz de identificar o "espaço", "guias", mas, na realidade, vemos separadores, pode ser mais do que estes, temos a situação real, ser especificado, que quando, nas FS usado, ele é usado para especificar a variável awk comando delimitador. 
2, BEGIN representa a primeira linha antes de ler os dados, a primeira operação separador de gravação, então o processamento de novo, de modo que os primeiros dados da linha, ele foi processado. segmentação manual, coexistem geral e FS.
FIM
Papel: No comando executado, o conteúdo de caráter END saída marcada.
Exemplo: A partir de arquivo score.txt para obter a segunda e a quarta coluna, e o resultado final "Fim" - awk 'FIM {printf "Fim \ n"} {printf $ 2 "\ t" $ 4 "\ n"}' score.txt
[root@192 cut]# awk 'END {printf "The End\n"} {printf $2 "\t" $4 "\n"}' score.txt
Name	Score
zhangsan	90
lisi	88
wangwu	98
zhaoliu	97
NangongYi	100
The End
[root@192 cut]#
Operadores relacionais
Exemplos: Obter pontuação do usuário de 100 pontos a partir de um arquivo de score.txt
A、过滤掉不用的行 cat score.txt | grep -v Name
[root@192 cut]# cat score.txt | grep -v Name
1	zhangsan	M	90
2	lisi	M	88
3	wangwu	M	98
4	zhaoliu	N	97
5	NangongYi	M	100
[root@192 cut]#

B、对第4列运算,结果输出第2列  cat score.txt | grep -v Name | awk '$4>=100 {printf $2 "\n"}'
[root@192 cut]# cat score.txt | grep -v Name | awk '$4>=100 {printf $2 "\n"}'
NangongYi
[root@192 cut]#
Publicado 59 artigos originais · ganhou elogios 2 · Vistas 5571

Acho que você gosta

Origin blog.csdn.net/LDR1109/article/details/102957643
Recomendado
Clasificación