awk uma coluna específica com quebra de linha inesperada

1

Eu não consigo encontrar uma solução para isso e isso está me deixando louco. Eu sei que posso usar awk para imprimir uma coluna (s). No entanto, estou tendo problemas para imprimir uma coluna específica devido à maneira como meu sistema de arquivos é organizado.

Isso é o que eu tenho quando executo df :

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/vg_root-root
                      36623968   4484592  30278976  13% /
tmpfs                   961312         0    961312   0% /dev/shm
/dev/sda1               516040    102896    386932  22% /boot

Se eu awk para a coluna 1K-blocks, ela retorna valores de outras colunas devido ao tamanho do local do sistema de arquivos. Basicamente isso acontece:

1K-blocks

4484596
961312
516040

Como posso listar as informações da coluna à direita?

    
por pullsumo 17.05.2013 / 21:42

4 respostas

6

Se você estiver canalizando df para awk , canalizar df -P . Ele foi projetado para ser facilmente analisável e, em particular, não quebra linhas. Lembre-se de pular a linha de cabeçalho ( NR >= 2 ).

Se você precisar analisar alguma saída existente com quebras de linha estranhas, poderá contar uma linha de continuação porque ela começa com um espaço.

awk '
  NR==1 {next}
  /^ / {print $1}
  !/^ / {print $2}
'

Cuidado, porém, existem variantes unix (pelo menos - OSX - e eu não ficaria surpreso se fosse o único onde isso acontece na prática) onde a designação do sistema de arquivos pode conter espaços, o que faz qualquer análise baseada em colunas problemático (infelizmente, df -P não usa abas).

    
por 18.05.2013 / 02:25
0

Eu não tenho um nome longo do FS, mas você pode tentar isso:

df |grep "%" |grep -v Use |awk {'print $(NF-4)'}

Isto supõe que você não precisa da linha de título com os blocos de 1K.

    
por 18.05.2013 / 05:34
0
df -Pk|tail -n +2|column -t | awk '{print $4}'
  • df -Pk : listará o sistema de arquivos.
  • tail -n +2 : removerá o cabeçalho.
  • column -t: usado para formatar a saída.
  • awk '{print $4}' : imprimirá o conteúdo da quarta coluna.
por 07.07.2014 / 08:31
0

Usando o GNU df , você pode usar o -P flag e canalizá-lo para awk , como sugerido em outras respostas. Um exemplo para deixar claro e simples: para o caso em que você deseja o número de kilobytes disponíveis ( df -k ), o seguinte funciona bem:

df -kP | awk 'NR>1 {print $4}'

Isto diz ao awk para imprimir a quarta coluna para todas as linhas após a primeira (ou seja, não a linha de cabeçalho).

De qualquer forma, a principal razão para adicionar essa resposta é a observação de que no Solaris (verificado no Solaris 9 e 10), esse sinalizador não é realmente necessário, apesar de quebras de linha semelhantes na formatação de saída; os seguintes trabalhos neste caso:

df -k | awk 'NR>1 {print $4}'
    
por 11.01.2016 / 16:41

Tags