Pensei primeiro no SED ( sed "s/^/COUNTER \&/" /tmp/1.tex
), mas ele foi projetado para uma única linha e não posso incrementar o contador por si só, pensando assim agora awk
porque tenho ótimas experiências gawk
em abordagens integradas. Dados
What & South Dragon & North Dragon & 5 \\ \hline
What & South Dragon & North Dragon & 5 \\ \hline
What & South Dragon & North Dragon & 5 \\ \hline
Saída esperada
1 & What & South Dragon & North Dragon & 5 \\ \hline
2 & What & South Dragon & North Dragon & 5 \\ \hline
3 & What & South Dragon & North Dragon & 5 \\ \hline
SO: Debian 8.5
text-processing
awk
nl
Léo Léopold Hertz 준영
fonte
fonte
nl -s ' &' /path/to/file
.-s
especifica o que separa os números do corpo do arquivo de entrada.nl
diferecat -n
e aawk
solução na medida em que não Número linhas vazias por padrãoIsso alcança o que você procura. (como faz
awk '$0=NR" & "$0' filename
, mas isso é um pouco enigmático)Ou, se
sed
preferível, isso dá o mesmo resultado.perl
abordagens.fonte
sed = filename | ...
? - - Eu não sabia que você pode usar sed com oequal
símbolo. - - Suased
declaração pode funcionar em ambientes dinâmicos? Alguma fraqueza?=
operador está na seção "Comandos de endereço zero ou um".= Print the current line number
. Portanto, o recurso é realmente embutido no sed. Agradável!Python pode ser uma boa ferramenta alternativa para isso:
A maneira como isso funciona é que redirecionamos o texto para o stdin do python e lemos as linhas a partir daí.
enumerate()
é a função que fornece a contagem de linhas,sys.stdin
especificada como entrada e1
é o índice inicial. O resto é simples - criamos uma lista de novas strings lançando o índice como string unida à' & '
string e à própria linha. Finalmente, tudo isso é remontado da lista em um teste pela''.join()
função.Como alternativa, aqui está uma versão de várias linhas para um arquivo de script ou simplesmente para facilitar a leitura:
Funciona da mesma forma:
Mas se você preferir fazê-lo no bash, isso também pode ser feito:
fonte
enumerate()
economiza três linhas de código. É útil ao lidar com outras coisas, como processar itens em listas. Veja docs.python.org/2/library/functions.html#enumeratebash
exemplo, sinta-se à vontade para usá-lo :) Acabei de descobrir que a experiênciaenumerate()
é mais elegante, mas essa é apenas a minha opinião. Por todos os meios, use outro método se você achar que é mais claro #enumerate
é mais claro que a instanciação variável. A expressão lambda pode economizar algum espaço?Essa também é uma opção usada
cat -n
com numeração automática:fonte