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のstdinにリダイレクトし、そこから行を読み取ることです。enumerate()
functionはsys.stdin
、入力として指定された、行カウントを与えるもので1
あり、開始インデックスです。残りは単純です-インデックスを文字列で結合された文字列としてキャストすることで新しい文字列のリストを作成し' & '
、行自体を作成します。最後に、''.join()
関数によってすべてがリストから1つのテストに再構成されます。
または、スクリプトファイルまたは単に読みやすくするための複数行バージョンを次に示します。
#!/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