Python puede ser una buena herramienta alternativa para esto:
$ 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
La forma en que esto funciona es que redirigimos el texto al stdin de Python y leemos líneas desde allí. enumerate()
La función es lo que da el recuento de líneas, sys.stdin
especificado como entrada y 1
es el índice inicial. El resto es simple: hacemos una lista de nuevas cadenas al convertir el índice como una cadena unida con una ' & '
cadena y la línea misma. Finalmente, todo lo que la función vuelve a montar de la lista en una prueba ''.join()
.
Alternativamente, aquí hay una versión de varias líneas para un archivo de script o simplemente para facilitar la lectura:
#!/usr/bin/env python
import sys
for index,line in enumerate(sys.stdin,1):
print str(index) + ' & ' + line.strip()
Funciona igual:
$ ./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
Pero si prefieres hacerlo en bash, entonces eso también se puede hacer:
$ 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