2012-02-02 26 views
5

Trong một kịch bản như thế này cho tách một tập tin lớn bằng chuỗi:biến thư increment trong awk

awk '/MYSTRING/ {n++}{print >"out_" n ".txt" }' LARGEFILE 

này tạo out_1.txt, out_2.txt vv

Làm thế nào tôi có thể nhận được tiền tố thư như được tạo ra bởi split (out_aa.txt, out_ab.txt, out_ac.txt, ...)?

Cảm ơn

Trả lời

11

của nó không phải là rất thẳng về phía trước để cho phép tôi sử dụng một số số học modulo đây như thế này:

awk '/MYSTRING/ {n++} {p=97+int(n/26); q=(n%26)+97; s=sprintf("out_%c%c.txt", p, q); print > s}' LARGEFILE 
+1

siêu! cảm ơn bạn – philstra

+1

Đây là một thủ môn @anubhava !! +1 –

+0

Bạn được chào đón, vui mừng vì nó đã hoạt động. – anubhava

0

Điều này có thể làm việc cho bạn:

awk -vv "$(echo {a..z}{a..z})" 'BEGIN{split(v,a);n++} /MYSTRING/ {n++}{print >"out_" a[n] ".txt" }' LARGEFILE