Chia tệp thành nhiều tệp nhỏ, phân tách bằng ký hiệu dòng mới


13

Có một tiện ích phân chia tập tin theo biểu tượng dòng mới? ví dụ: nếu một tệp chứa các dòng sau,

aa
bbb
cccc

Nếu tôi muốn chia nó thành 3 tệp, đầu ra mong muốn sẽ là:

aa, bbbcccc(trong 3 file khác nhau)

Tôi đã kiểm tra splitlệnh, nó chỉ cắt tập tin theo kích cỡ tập tin, không phải những gì tôi muốn.

Nếu tôi không tự viết một tiện ích, có công cụ tiêu chuẩn nào để sử dụng không?


Tên tập tin là gì?
Rahul Patil

Bạn muốn tạo tập tin của từng dòng? Tôi đúng ?
Rahul Patil

Câu trả lời:


14

Trừ khi tôi thiếu một cái gì đó, splitkhông phân chia theo dòng nếu bạn sử dụng -lchuyển đổi:

   -l, --lines=NUMBER
          put NUMBER lines per output file

vì thế

split -l 1 inputfile

nên làm những gì bạn muốn


4
awk '{print > $0".txt" }'  inputfile

sẽ tạo một tệp trên mỗi dòng duy nhất trong tệp đầu vào được đặt tên theo nội dung của các dòng đó (có .txtphần mở rộng). Nhưng hãy cẩn thận khi đạt đến giới hạn của các tệp mở đồng thời, một số awktriển khai sẽ thất bại.

Hoặc là

awk '{f = "output_file." NR; print $0 > f; close(f)}' inputfile

Để có các tập tin đầu ra được đánh số.


Bạn có thể muốn đóng () tệp đầu ra sau khi được ghi, nếu không, bạn sẽ chạy vào số lượng giới hạn tệp mở tối đa với hầu hết các cài đặt awk.
Stéphane Chazelas

không biết điều đó .. bạn có thể làm điều đó cho tôi không? cảm ơn ..
Rahul Patil

3
A=0
while IFS= read -r LINE ; do
  printf '%s\n' "$LINE" > newfile$A
  (( A++ ))
done < "$INPUTFILE"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.