Python може бути хорошим альтернативним інструментом для цього:
$ 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
Як це працює, ми перенаправляємо текст у stdin python і звідти читаємо рядки. enumerate()
Функція - це те, що дає кількість рядків, sys.stdin
вказане як вхідне і 1
є початковим індексом. Решта просте - ми складаємо список нових рядків, переводячи індекс, як рядок, з'єднаний разом із ' & '
рядком, так і сам рядок. Нарешті, все, що збирається зі списку в один тест ''.join()
функцією.
Крім того, ось багатолінійна версія для файлу сценарію або просто для читання:
#!/usr/bin/env python
import sys
for index,line in enumerate(sys.stdin,1):
print str(index) + ' & ' + line.strip()
Працює точно так само:
$ ./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
Але якщо ви віддаєте перевагу робити це в bash, то це також можна зробити:
$ 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