como imprimir a contagem de padrões correspondentes/não correspondentes e imprimir vários padrões separados por linha.
Exemplo de entrada ( test.log
):
This 23 line has eight 8888
This 11 line has three 3333
need 12 to separate eight and three 3333
eight 32 is greater than three 8888
three 13 is less than eight 3333
three 14 is printed more than eight 3333
Saída desejada:
8888:4
3333:2
5555:0
This 11 line has three 3333
need 12 to separate eight and three 3333
three 13 is less than eight 3333
three 14 is printed more than eight 3333
============================================
This 23 line has eight 8888
eight 32 is greater than three 8888
==========================================
o que eu tentei até agora:
- para obter o número de linhas:
egrep -o '8888|3333|5555' test.log | sort| uniq -c
saída:
4 3333
2 8888
mas não está imprimindo 0 5555
para indicar ocorrência zero de cinco no arquivo test.log
saída desejada:
4 3333
2 8888
0 5555
egrep '8888|3333' test.log | sort -V
esta classificação é gerada em ordem alfabética e não de acordo com a saída que espero, conforme mostrado abaixo:
This 11 line has three 3333
need 12 to separate eight and three 3333
three 13 is less than eight 3333
three 14 is printed more than eight 3333
============================================
This 23 line has eight 8888
eight 32 is greater than three 8888
==========================================
Responder1
O programa que você está procurando e que pode facilmente fazer o que você deseja é chamado awk
. :-)
Ele pode realizar ações programadas em padrões de RE correspondentes.
Programa de exemplo não testado, simplificado e rotineiro awk
que deve funcionar com sua entrada de exemplo e padrões especificados:
BEGIN {
eights = 0;
fives = 0;
threes = 0;
}
/8888/ {
eightln[eights] = $0;
eights++;
}
/5555/ {
fiveln[fives] = $0;
fives++;
}
/3333/ {
threeln[threes] = $0;
threes++;
}
# ... and so on
END {
printf("%d 8888\n", eights);
printf("%d 5555\n", fives);
printf("%d 3333\n", threes);
for (i = 0; i < eights; i++) {
print eightln[i];
}
print "=========="
for (i = 0; i < fives; i++) {
print fiveln[i];
}
print "=========="
for (i = 0; i < threes; i++) {
print threeln[i];
}
}