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]#