Tente
grep Removed filename | awk '{sum += $2} END { print "sum=", sum }'
ou
awk '/Removed/ { sum += $2 } END { print "sum=", sum }' filename
Eu gostaria de resumir números em um arquivo de texto simples. Existe alguma maneira eu posso fazer isso com um comando ou um script bash?
Digamos que eu queira extrair o número em um padrão assim:
… text text …
Removed 50 items out of 50 items.
… text text …
Removed 34 items out of 50 items.
… text text …
Portanto, no caso acima, gostaria de extrair o primeiro número nas linhas que aparecem e resumir. No exemplo, o resultado deve ser 84. Eu sei como grep, mas essa é a extensão do meu conhecimento dos comandos * nix.
com o perl você escreveria isto:
perl -a -n -e '$sum += $F[1] if $F[0] eq "Removed"; END { print $sum }' filename(s)
Onde -a média autosplit em espaços no array @F $ F [0] é o primeiro elemento onde o palavra Removido deve ser e $ F [1] é o segundo elemento.
-n significa passar por cima dos arquivos dados na linha de comando, linha por linha
-e significa, pegue a próxima string como o script (em vez de um arquivo)
Se você está rodando em janelas nativas (eu vejo no comentário mencionando Cygwin) então você poderia usar o pacote "Padre on Strawberry" para tudo isso, embora devido às diferentes camadas você trocaria os caracteres 'e'.
Às vezes, quero resumir várias colunas que aparecem em um arquivo. Este script resume colunas que "parecem numéricas"
#!/usr/bin/perl -w
#
# csum
#
# Sum up numerical fields in a text file
#
my $i;
my @sum;
while (<>)
{
print;
my @F = split;
for $i (0..$#F)
{
if ($F[$i] =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/)
{
$sum[$i] += $F[$i];
}
}
}
print "-" x 75 . "\n";
print join "\t", map {$_ or ""} @sum;
print "\n";
if [ $# -ne 1 ]
then
echo "Usage: $0 number"
echo " I will find sum of all digit for given number"
echo " For eg. $0 123, I will print 6 as sum of all digit (1+2+3)"
exit 1
fi
n=$1
sum=0
sd=0
while [ $n -gt 0 ]
do
sd='expr $n % 10'
sum='expr $sum + $sd'
n='expr $n / 10'
done
echo "Sum of digit for numner is $sum"