Split

使用 csplit (或類似工具)將文件拆分為 n 個文件

  • December 17, 2019

我有一個具有以下模式的大文件:

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

引用自:https://unix.stackexchange.com/questions/557632