Python có thể là một công cụ thay thế tốt cho việc này:
$ 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
Cách thức hoạt động này là chúng tôi chuyển hướng văn bản vào stdin của python và đọc các dòng từ đó. enumerate()
Hàm là số cho dòng đếm, với sys.stdin
chỉ định là đầu vào và 1
là chỉ mục bắt đầu. Phần còn lại rất đơn giản - chúng tôi tạo danh sách các chuỗi mới bằng cách truyền chỉ mục dưới dạng chuỗi được nối với nhau bằng ' & '
chuỗi và chính dòng đó. Cuối cùng, tất cả những gì được ghép lại từ danh sách thành một bài kiểm tra của ''.join()
hàm.
Ngoài ra, đây là phiên bản nhiều dòng cho tệp tập lệnh hoặc đơn giản là để dễ đọc:
#!/usr/bin/env python
import sys
for index,line in enumerate(sys.stdin,1):
print str(index) + ' & ' + line.strip()
Hoạt động giống nhau:
$ ./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
Nhưng nếu bạn thích làm điều đó trong bash, thì điều đó cũng có thể được thực hiện:
$ 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