Python może być dobrym alternatywnym narzędziem do tego:
$ 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
Działa to tak, że przekierowujemy tekst do standardowego interfejsu Pythona i odczytujemy stamtąd wiersze. enumerate()
funkcja podaje liczbę wierszy, sys.stdin
podana jako dane wejściowe i 1
jest indeksem początkowym. Reszta jest prosta - tworzymy listę nowych ciągów, rzutując indeks jako ciąg połączony razem z ' & '
ciągiem i samą linią. Wreszcie, wszystko to jest ponownie składane z listy w jeden test przez ''.join()
funkcję.
Alternatywnie, oto wieloliniowa wersja pliku skryptu lub po prostu dla czytelności:
#!/usr/bin/env python
import sys
for index,line in enumerate(sys.stdin,1):
print str(index) + ' & ' + line.strip()
Działa tak samo:
$ ./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
Ale jeśli wolisz robić to w bashu, możesz to również zrobić:
$ 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