Python bunun için iyi bir alternatif araç olabilir:
$ 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
Bunun çalışma şekli, metni python'un stdinine yönlendirip oradan satırları okumanızdır. enumerate()
işlevi sys.stdin
girdi olarak belirtilmiş satır 1
başlangıcını verir ve başlangıç dizinidir. Gerisi basit - dizeyi dize ile birleştirilen ' & '
dize ve satırın kendisi olarak döküm yaparak yeni dizelerin listesini oluşturuyoruz . Son olarak, listeden yeniden birleştirilen her şey ''.join()
fonksiyon tarafından bir test haline getirilir .
Alternatif olarak, bir komut dosyası veya yalnızca okunabilirlik için çok satırlı bir sürüm:
#!/usr/bin/env python
import sys
for index,line in enumerate(sys.stdin,1):
print str(index) + ' & ' + line.strip()
Aynı şekilde çalışır:
$ ./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
Ama bunu bash'da yapmayı tercih ederseniz, bu da yapılabilir:
$ 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