如何将一个文本文件分割成多个* .txt文件?

我有一个文本文件file.txt (12 MB),其中包含:

 something1 something2 something3 something4 (...) 

有没有办法将file.txt分割成12 * .txt文件,比如说file2.txtfile3.txtfile4.txt (…)?

Solutions Collecting From Web of "如何将一个文本文件分割成多个* .txt文件?"

您可以使用Linux bash核心实用程序split

 split -b=1M -d file.txt file 

请注意, MMB都可以,但大小是不同的。 MB是1000 * 1000,M是1024 ^ 2

如果-l行分隔,可以使用-l参数。

UPDATE

 a=(`wc -l yourfile`) ; lines=`echo $a/12 | bc -l` ; split -l=$lines -d file.txt file 
 $ split -l 100 input_file output_file 

其中-l是每个文件中的行数。 这将创建:

  • output_fileaa
  • output_fileab
  • output_fileac
  • output_filead
  • ….

约翰的答案不会产生OP所需的.txt文件。 使用:

 split -b=1M -d file.txt file --additional-suffix=.txt 

使用bash:

 readarray -t LINES < file.txt COUNT=${#LINES[@]} for I in "${!LINES[@]}"; do INDEX=$(( (I * 12 - 1) / COUNT + 1 )) echo "${LINES[I]}" >> "file${INDEX}.txt" done 

使用awk:

 awk '{ a[NR] = $0 } END { for (i = 1; i in a; ++i) { x = (i * 12 - 1) / NR + 1 sub(/\..*$/, "", x) print a[i] > "file" x ".txt" } }' file.txt 

不像split这一个确保线数最平均。

不管上面说了什么,在我的Ubuntu 16我必须做的:

 > split -b 10M -d system.log system_split.log 

请注意-b和值之间的空格

awk -vc = 1'NR%1000000 == 0 {++ c} {print $ 0> c“.txt”}'Datafile.txt

for * .txt中的文件名; 做mv“$文件名”“前缀_ $文件名”; 完成;

我同意@CS裴,然而这不适合我:

split -b=1M -d file.txt file

…在…之后,把它扔掉了。 相反,我只是删除它,并没有留下它与变量之间的空间,并使用小写“m”:

split -b1m -d file.txt file

而要追加“.txt”,我们用什么@schoon说:

split -b=1m -d file.txt file --additional-suffix=.txt

我有一个188.5MB的txt文件,我使用了这个命令[但是对于-b5m文件使用-b5m ],并且返回了35个分割文件,除txt文件和5.2MB之外的所有文件都是5.0MB。 现在,因为我想让我的线保持完整,所以我想每隔一百万行分割一个主文件,但是split命令不允许我甚至不允许-1000000 ,更不用说“ -1000000 ,所以需要大量的线来分割不管用。