Extrai colunas de uma string usando grep

1

Eu preciso extrair de /proc/net/dev a segunda e a décima colunas separadas por espaços. Em outras palavras, o número de bytes recebidos e transmitidos.

É possível fazer isso usando grep e referências anteriores?

    
por Guest 03.08.2015 / 15:36

2 respostas

1

para responder a sua pergunta:

awk '{print $2,$10}' /proc/net/dev

rendimento

Receive
|bytes packets
6385384218 42314607745
12034420041 12034420041

que pode não ser o que você procura.

você pode usar

awk '$1 ~ /:/ {print $2,$10}' dev
6385389751 42314610935
12034420241 12034420241

onde

  • $1 ~ /:/ selecione a linha onde o primeiro arquivo é foo:
  • {print $2,$10} print segundo e décimo campo

grep

    O
  1. grep pode ser usado para corresponder a uma expressão regular, para que você possa escolher números de /proc/dev/net
  2. no entanto, a expressão regular descreve mas não pode agir.

Em outras palavras, não vejo nenhuma expressão regular aplicada a um único comando grep e, em seguida, será ativada

  eth0: 6385654376 26986310    0 107680    0     0          0      4665 42314947519 21475282    0    0    0     0       0          0
    lo: 12034424441 4553238    0    0    0     0          0         0 12034424441 4553238    0    0    0     0       0          0

para (não figura exata)

6385389751 42314610935
12034420241 12034420241

usando grep FOO

onde FOO consiste apenas em opções e argumentos do grep.

No @ Emeric tente ele poderia ter duas colunas, quando eu corro no meu sistema operacional:

6385672702
42314983073
12034425441
12034425441

ainda, você pode tentar a sua sorte no link

    
por 03.08.2015 / 15:44
0

Se tudo o que você pode usar é grep , experimente o seguinte:

grep -Eo '[^ ]+:( *[0-9]*){9}' /proc/net/dev | grep -Eo '(: *[0-9]*|[0-9]*$)' | grep -o '[0-9]*'
137517672
9029195
  • A primeira expressão imprime o nome da interface + dois pontos, seguidos pelos próximos 9 grupos de dígitos.
  • A segunda expressão extrai apenas os grupos de dígitos precedidos pelos dois pontos ou seguidos pelo fim da linha (primeira e última colunas selecionadas). É aqui que a linha é dividida em uma linha por coluna correspondente.
  • A última expressão elimina os dois pontos principais ( Nothing political here ).

Como apontado anteriormente, grep está longe de ser a melhor maneira de conseguir isso.

    
por 03.08.2015 / 16:12