Python kann hierfür eine gute Alternative sein:
$ 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
Dies funktioniert so, dass wir Text in Pythons Standard umleiten und von dort aus Zeilen lesen. enumerate()Funktion gibt die Zeilenanzahl an, wobei sys.stdinals Eingabe angegeben und 1der Startindex ist. Der Rest ist einfach: Wir erstellen eine Liste neuer Zeichenfolgen, indem wir den Index als Zeichenfolge zusammenfügen, die mit der ' & 'Zeichenfolge und der Zeile selbst verbunden ist. Schließlich wird alles, was von der ''.join()Funktion aus der Liste zu einem Test zusammengesetzt wird .
Alternativ ist hier eine mehrzeilige Version für eine Skriptdatei oder einfach zur besseren Lesbarkeit:
#!/usr/bin/env python
import sys
for index,line in enumerate(sys.stdin,1):
print str(index) + ' & ' + line.strip()
Funktioniert trotzdem:
$ ./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
Aber wenn Sie es lieber in Bash machen, dann können Sie das auch machen:
$ 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