Python peut être un bon outil alternatif pour cela:
$ 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 façon dont cela fonctionne est que nous redirigeons le texte dans le stdin de python et lisons des lignes à partir de là. enumerate()
La fonction est ce qui donne le nombre de lignes, avec sys.stdin
spécifié comme entrée et 1
est l'indice de départ. Le reste est simple - nous créons une liste de nouvelles chaînes en castant l'index sous forme de chaîne jointe à la ' & '
chaîne et à la ligne elle-même. Enfin, tout cela est remonté de la liste en un seul test par la ''.join()
fonction.
Alternativement, voici une version multi-lignes pour un fichier de script ou simplement pour la lisibilité:
#!/usr/bin/env python
import sys
for index,line in enumerate(sys.stdin,1):
print str(index) + ' & ' + line.strip()
Fonctionne tout de même:
$ ./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
Mais si vous préférez le faire en bash, cela peut aussi être fait:
$ 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