Python pode ser uma boa ferramenta alternativa para isso:
$ python -c "import sys;lines=[str(i)+' & '+l for i,l in enumerate(sys.stdin,1)]; print ''.join(lines)" < input.txt
1 & What & South Dragon & North Dragon & 5 \\ \hline
2 & What & South Dragon & North Dragon & 5 \\ \hline
3 & What & South Dragon & North Dragon & 5 \\ \hline
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 e 1
é 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:
#!/usr/bin/env python
import sys
for index,line in enumerate(sys.stdin,1):
print str(index) + ' & ' + line.strip()
Funciona da mesma forma:
$ ./line_counter.py < input.txt
1 & What & South Dragon & North Dragon & 5 \\ \hline
2 & What & South Dragon & North Dragon & 5 \\ \hline
3 & What & South Dragon & North Dragon & 5 \\ \hline
Mas se você preferir fazê-lo no bash, isso também pode ser feito:
$ counter=1; while read line ; do printf "%s & %s\n" "$counter" "$line" ; counter=$(($counter+1)) ; done < input.txt
1 & What & South Dragon & North Dragon & 5 \ hline
2 & What & South Dragon & North Dragon & 5 \ hline
3 & What & South Dragon & North Dragon & 5 \ hline