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
Это работает так, что мы перенаправляем текст в стандартный поток 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