
Eu tenho um arquivo de log de script parecido com este:
2012-9-16
Did something
Did 345 things
Script time: 244 seconds
2012-9-17
Did yet something
Did another thing 23 times
Script time: 352 seconds
2012-9-18
Did something special for 34 seconds 51 times
Did nothing at all
Script time: 122 seconds
Gostaria de encontrar o maior valor de N
nas linhas Script time: N seconds
. No entanto, preciso manter o contexto, portanto, simplesmente remover todas as linhas que não contêm Script time
não é uma solução viável.
Atualmente, estou procurando linhas com Script time
, classificando-as para encontrar o valor mais alto, depois voltando ao arquivo original e procurando por esse valor. No entanto, se houver uma maneira mais direta, eu adoraria saber.
Isso está no Vim 7.3 em um CentOS recente. Eu preferiria permanecer no VIM, se possível.
Responder1
Não tenho certeza se você pode usar um comando shell no vim, mas esta seria minha solução... um pouco hacky:
cat test.txt | sed ":a;N;$!ba;s/\n\n/###/g" | sed ":a;N;$!ba;s/\n/ /g" | sed "s/###/\n/g" | sort "-nrt:" -k2 | head -1
Entããão...breve explicação:
cat test.txt # Can be omitted as sed does also accept files,
# but I like it for readability
sed ":a;N;$!ba;s/\n\n/###/g" # Replace the double-newlines with a placeholder
sed ":a;N;$!ba;s/\n/ /g" # Replace all newlines with a space
sed "s/###/\n/g" # Replace all placeholders with a newline
sort "-nrt:" -k2 # Sort numeric, reverse, use the : as delimiter and
# use the second field for sorting
head -1 # Give us only the first line
O sed
é levadodesta pergunta do Stack Overflow.
Responder2
Tentar awk
:
awk -vRS='' 'max<$(NF-1){max=$(NF-1);tmp=$0};END{print tmp}' input.txt
Ligue :awk
vim
:%!awk ...
Responder3
Encontrei a solução com esta função VIM:
function Find()
execute "g!/Script/d"
execute "sort"
normal G
normal 0v$"ay
normal u
execute "call search('".@a."')"
endfunction