Python può essere un buon strumento alternativo per questo:
$ 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
Il modo in cui funziona è che reindirizziamo il testo nello stdin di Python e leggiamo le righe da lì. enumerate()
La funzione è ciò che dà il conteggio delle righe, con sys.stdin
specificato come input ed 1
è l'indice iniziale. Il resto è semplice: creiamo un elenco di nuove stringhe eseguendo il casting dell'indice come stringa unita insieme a ' & '
stringa e alla riga stessa. Infine, tutto ciò che viene riassemblato dall'elenco in un test dalla ''.join()
funzione.
In alternativa, ecco una versione multilinea per un file di script o semplicemente per leggibilità:
#!/usr/bin/env python
import sys
for index,line in enumerate(sys.stdin,1):
print str(index) + ' & ' + line.strip()
Funziona allo stesso modo:
$ ./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
Ma se preferisci farlo in bash, anche quello può essere fatto:
$ 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