![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui. |
Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
|
||||
| Fio | Thread Starter | Fórum | Respostas | Última postagem |
| Perl analisar comparativamente a analisar Ksh | Popeye | Programação Shell Script e | 1 | 08-06-2008 11:46 |
| leitura em pares de linhas no arquivo ksh | ytokar | Programação Shell Script e | 4 | 02-08-2008 02:50 |
| perl pesquisa e substituir pares | umen | Programação Shell Script e | 1 | 07-30-2006 12:37 |
| proc | bache_gowda | UNIX para Dummies Perguntas & Respostas | 7 | 05-23-2005 12:18 |
| /proc | aojmoj | UNIX & avançada para usuários experientes | 3 | 11-20-2002 05:54 |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
||||
|
Oi tudo, Preciso de ajuda para usar sed/awk / linux outras ferramentas para responder a seguinte meta: Estou tentando pegar a saída do / proc / net / dev: Código:
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo:18748525 129811 0 0 0 0 0 0 18748525 129811 0 0 0 0 0 0
eth0:1699369069 226296437 0 0 0 0 0 3555 4118745424 194001149 0 0 0 0 0 0
eth1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
sit0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
... grep fora uma interface (eth0), e transformá-los em os seguintes dados: Código:
rxbytes:1699369069 rxpackets:226296437 rxerrs:0 rxdrop:0 rxfifo:0 rxframe:0 rxcompressed:0 rxmulticast:3555 \ txbytes:4118745424 txpackets:194001149 txerrs:0 txdrop:0 txfifo:0 txcolls:0 txcarrier:0 txcompressed:0 Eu tenho chegado tão longe como este trecho: Código:
cat /proc/net/dev | egrep "(eth0|face)" | sed -e 's/|/:/' | sed -e 's/|/ /' | cut -d ":" -f 2 | tr -s " " " " bytes packets errs drop fifo frame compressed multicast bytes packets errs drop fifo colls carrier compressed 1709184740 226328683 0 0 0 0 0 3555 4122564415 194035769 0 0 0 0 0 0 ... mas não tenho certeza se a proceder a partir daqui, ou se esse é mesmo o caminho certo. Alguém já fez algo parecido antes (ou seja, transformar em colunas chave: valor de pares)? Sua especialidade é muito apreciado! Update: Eu encontrei a forma de transpor as linhas em colunas (que é um passo mais perto!): Código:
cat /proc/net/dev | egrep "(eth0|face)" | sed -e 's/|/:/' | sed -e 's/|/ /' | cut -d ":" -f 2 | tr -s " " " " | \
awk 'BEGIN {FS=" "} {for (i=1;i<=NF;i++){ arr[NR,i]=$i; if(big <= NF) big=NF; }} \
END {for(i=1;i<=big;i++){for(j=1;j<=NR;j++){printf("%s:",arr[j,i]);}printf("\n");}}'
bytes:1718395341:
packets:226353349:
errs:0:
drop:0:
fifo:0:
frame:0:
compressed:0:
multicast:3555:
bytes:4126856358:
packets:194063589:
errs:0:
drop:0:
fifo:0:
colls:0:
carrier:0:
compressed:0:
Agora eu só preciso descobrir como colocar o "TX" e "rx" e tira a rasteira ':' e eu tenho tudo pronto! Este fórum é fantástico. Atualização 2: Eu consegui! A única maneira que poderia ser melhor é com CamelCase (RxBytes, etc): Código:
cat /proc/net/dev | egrep "(eth0|face)" | sed -e 's/|/:/' -e 's/|/ /' | cut -d ":" -f 2 | tr -s " " " " | \
awk 'BEGIN {FS=" "} {for (i=1;i<=NF;i++){ if(i<9){arr[NR,i]="rx"$i;}else{arr[NR,i]="tx"$i;} if(big <= NF) big=NF; }} \
END {for(i=1;i<=big;i++){for(j=1;j<=NR;j++){ printf("%s\t",arr[j,i]);}printf("\n");}}' | sed -e 's/\t$//' -e 's/\t/:/' -e 's/:[tr]x/:/'
rxbytes:1790844622
rxpackets:226585666
rxerrs:0
rxdrop:0
rxfifo:0
rxframe:0
rxcompressed:0
rxmulticast:3555
txbytes:4161116750
txpackets:194310608
txerrs:0
txdrop:0
txfifo:0
txcolls:0
txcarrier:0
txcompressed:0
O formato multiline realmente funciona bem para o meu pedido. Última edição por otheus; em 01/30/2009 07:31.. Motivo: Woot! |
| Marcadores |
| Tags |
| resolver, pendentes há meses, não resolvidas durante semanas |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|