Split
使用 csplit (或類似工具)將文件拆分為 n 個文件
我有一個具有以下模式的大文件:
ABC line 1 line 2 line 3 ABC line 1 line 2 ABC line1 ABC line 1 line 3
使用
csplit
工具,我可以根據/ABC/
模式將上面的文件拆分為 4 個子文件:csplit -z input.txt /ABC/ {*}
我想知道如何手動指定所需輸出文件的數量。
您可以使用
awk
- 不完全是您想要的,但可能會成功。想法:將 n 行列印到零件文件中,然後在創建新的零件文件之前搜尋下一次出現的模式。
缺點:
- 如果您有大塊並且只是跳過了此類塊的開頭,則某些文件可能會變得比其他文件大得多。
- 原始文件未刪除(即所需空間的兩倍)。
- 如所寫,匹配線必須準確
ABC
(與同一行上的其他詞相比沒有公差 - 可以調整)- 通過設置行數而不是所需的輸出文件數來工作(根據輸入文件的行數估算)
akw
-腳本BEGIN{ outfile="part_"++i j=0 } { j++ #block size set to at least 10 lines in this example #if threshold line number reached: search for next keyword, #then increase part file name counter and reset line threshold counter if ( j>=10 && $0 == "ABC" ) { outfile="part_"++i ; j=0 } print > outfile }
通過執行
awk -f script.awk input.txt