Bạn có thể sử dụng csplit
. Nó thực hiện công việc tốt, ngoại trừ việc nó hơi không linh hoạt đối với tên tệp đầu ra (bạn chỉ có thể chỉ định tiền tố, không phải là hậu tố) và bạn cần vượt qua đầu tiên để tính số lượng mảnh.
csplit -f text -- input.txt '//' "{$(wc -l input.txt)}"
for x in text[0-9]*; do mv -- "$x" "$x.txt"; done
Phiên bản GNU, nhưng không phải phiên bản OSX, có các phần mở rộng giải quyết cả hai vấn đề.
csplit -b '%d.txt' -f text -- input.txt '//' '{*}'
Ngoài ra, nếu csplit
quá không linh hoạt, bạn có thể sử dụng awk.
awk '{filename = sprintf("text%d.txt", NR); print >filename; close(filename)}' input.txt
awk: text18.txt makes too many open files input record number 18, file ~/Desktop/namnlös mapp/flash varibales3.txt source line number 1