Eu tenho um arquivo de texto que contém (entre outros) as seguintes linhas:
{chapter}{{1}Einleitung}{27}{chapter.1}
{chapter}{{2}Grundlagen}{35}{chapter.2}
Como posso
- obtenha as 2 linhas deste arquivo de texto (elas sempre conterão
}Einleitung
resp.}Grundlagen}
e - extrair os números de 2 páginas (neste caso, 27 e 35),
- calcular a diferença
35-27 = 8
e - salve a diferença (
8
) dos dois números em uma variável
Talvez com um script bash no Mac OS X?
macos
bash-scripting
string-manipulation
MostlyHarmless
fonte
fonte
var=$({ grep -Eo '(Einleitung|Grundlagen)\}.[0-9]+.'|sort -r|tr '\n' ' '| tr -d -c '0-9 '|awk '{print $1 - $2}'; }</tmp/inputfile)
Respostas:
Eu não sei se o Mac OS X tem awk. Se isso acontecer, isso deve funcionar:Isso deve funcionar:
Como funciona:
FS="[{}]+"
define o separador de campo para qualquer combinação de chaves.$4
refere-se ao terceiro arquivado na linha (separado por chaves).DIFFERENZ=$(...)
avalia o comando...
e armazena a saída emDIFFERENZ
.fonte
Ergebnisse und Diskussion
? Eu tentei comif ($3=="Ergebnisse und Diskussion")
, mas isso não parece encontrar a linha corretaif ($3=="Ergebnisse" && $4=="und" && $5=="Diskussion")
Deveria trabalhar. Mas o número da página não será mais armazenado$4
. Eu atualizarei minha resposta.calc.awk:
você pode ligar via:
vai imprimir
8
. você poderia armazenar esse número em uma variável bash assim:se você precisar mais apertado você também pode reescrever
calc.awk
para não ser um arquivo separado, mas uma linha:fonte
Pure bash 4.x, e mostra as diferenças para cada capítulo:
fonte
Isso requer que as linhas sempre sejam exatamente assim (ou seja, sem título diferente), devido à
cut
.fonte
1
ou100
awk
são mais flexíveis.