如何使用shell将大文件拆分为多个部分

如何使用shell将大文件拆分为多个部分,shell,Shell,我有一个非常大的文件,看起来像这样: //abc/file1.js some javascript code //abc/file2.js some javascript code //abc/file3.js some javascript code 在这里,我想将这个大文件分成若干部分,并将这些部分存储到file1.js,file2.js等尝试csplit-k-f文件-'/^\/\/'{1000}'

我有一个非常大的文件,看起来像这样:

//abc/file1.js

some javascript code

//abc/file2.js

some javascript code

//abc/file3.js

some javascript code

在这里,我想将这个大文件分成若干部分,并将这些部分存储到
file1.js
file2.js
等尝试
csplit-k-f文件-'/^\/\/'{1000}'

将1000调整到合适的数字。如果
largefile
中有n个文件,请使用n-2而不是1000

如果您使用的是GNU csplit,您可以简单地使用
*
而不是1000


如果
大文件中有许多文件,您还需要使用
-n4
或更高的值。

如果您可以编辑该文件,并且您确切地知道要拆分的位置,而不是某个字节偏移量,则只需将新文件复制到新文件中,并用您想要的名称保存这些新文件和现有文件。也就是说,使用编辑器本身。

您可以使用awk实现这一点。打印每个输入行,但打印到一个文件名,该文件名在输入行指示新文件启动时更改

awk '
    /^\/\/abc\// { filename = $1; sub(/.*\//, "", filename); next; }
    filename { print >filename }
'

如果希望包含标题行,例如将
//abc/file1.js
作为
file1.js
的第一行,请删除对
next
的调用。您可能需要根据您的需求调整识别标题行的代码。第一个标题行之前的文本将不会在任何地方打印;如果您想将其打印为标准输出,请将
filename{…}
更改为
1{…}

@lhf,您能给出更多细节或示例吗?谢谢另请参见和。此文件非常大,超过150000行。这并不是很大:-)我使用Vim处理了更大的文件。我这么说的唯一原因是,如果文件不仅仅是任意的,而且需要在特定文本处拆分,那么编辑器是最好的选择。