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()
函数是给出行数(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