Cada linha contém texto e números em uma coluna. Eu preciso calcular a soma dos números em cada linha. Como eu posso fazer isso? Valeu
example.log contém:
time=31sec
time=192sec
time=18sec
time=543sec
A resposta deve ser 784
Cada linha contém texto e números em uma coluna. Eu preciso calcular a soma dos números em cada linha. Como eu posso fazer isso? Valeu
example.log contém:
time=31sec
time=192sec
time=18sec
time=543sec
A resposta deve ser 784
Respostas:
Se sua opção de
grep
suporte-o
, você pode tentar:POSIXly:
fonte
Com uma versão mais recente (4.x) do GNU
awk
:Com outras
awk
tentativas:fonte
s+0
, casos
esteja vazio, ele será impresso em0
vez de vazio.s
pode estar vazio; se os dados de entrada não contiverem linhas (ou seja, se não houver nenhuma entrada ). Nesse caso, existem dois comportamentos possíveis; 1) sem entrada => sem saída, ou 2) sempre produz algo, se apenas 0. Ambos são opções sensíveis, dependendo do contexto da aplicação. A+0
opção de endereçamento 2). Para abordar a opção 1), você prefere escreverEND {if(s) print s}
. - Portanto, não faz sentido assumir uma das opções (neste caso de canto sem dados) até que seja especificada pela pergunta.fonte
time=1.4e5sec
Outro GNU
awk
:Um
perl
:POSIX:
fonte
fonte
sed
:awk --field-separator = '{ sum+=$2 } END { print sum}' data.dat
-F'='
vez de #--field-separator =
man awk
único dá-F fs
e--field-separator fs
-F'='
ou-F '='
existem duas maneiras de fazer isso-F fs
(fs é "=" no seu caso). Eu adicionei os singlequotes para garantir que os fs está devidamente visto e interpretado por awk, não o shell (útil se os fs é ';', por exemplo)Você pode tentar isso:
fonte
Todo mundo postou
awk
respostas incríveis , das quais eu gosto muito.Uma variação para @cuonglm substituindo
grep
porsed
:sed
tiras tudo, exceto para os números.paste -sd+ -
comando une todas as linhas como uma única linhabc
avalia a expressãofonte
Você deve usar uma calculadora.
Com suas quatro linhas que imprimem:
E mais simplesmente:
... que imprime ...
Se a velocidade é o que você procura,
dc
é o que deseja. Tradicionalmente, erabc
o compilador - e ainda é para muitos sistemas.fonte
dc
mais próximo que eu posso dizer. Do que você está falando?perl
do conjunto de ferramentas padrão do unix - realmente não faz muito sentido se você usar as ferramentas GNU compiladas em uma cadeia de ferramentas GNU. Todo o inchaço que pode afetar negativamente o desempenho do Perl também está em todos os utilitários GNU compilados pelo GNU. Triste mas verdadeiro. Você precisa de um conjunto de ferramentas simples, simples e simples, para avaliar com precisão a diferença. Como um conjunto de ferramentas de herança ligado estaticamente a bibliotecas muçulmanas, por exemplo - dessa maneira, você pode comparar o paradigma de uma ferramenta / uma tarefa versus o de uma ferramenta para governar todos eles.Através do python3,
fonte
re.findall
retorna uma lista de strings, isso não vai funcionarsum(int(e) for e in l)
seja mais pitônico.Solução de bash pura (Bash 3+):
Versão curta:
fonte
PS4='$((x+=${time%s*}))' time=0 x=0 sh -x <infile