如何将一个文本文件拆分为多个 *.txt 文件?

2024-10-31 08:38:00
admin
原创
155
摘要:问题描述:我得到一个文本文件file.txt(12 MB),其中包含:something1 something2 something3 something4 (...) 有没有办法将其分割成 12个file.txt*.txt 文件,比如说file2.txt,,,等等?file3.txt`file4.txt`解...

问题描述:

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

something1
something2
something3
something4
(...)

有没有办法将其分割成 12个file.txt*.txt 文件,比如说file2.txt,,,等等?file3.txt`file4.txt`


解决方案 1:

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

split -b 1M -d  file.txt file

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

如果您想按行分隔,则可以使用-l参数。

更新

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

Kirill建议的另一种解决方案是,您可以执行以下操作

split -n l/12 file.txt

请注意l,不是,onesplit -n几个选项,例如N,,,,。k/N`l/k/Nr/Nr/k/N`

解决方案 2:

$ split -l 100 input_file output_file

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

  • 输出文件aa

  • 输出文件ab

  • 输出文件ac

  • 输出文件

  • ....

解决方案 3:

CS Pei 的答案不会像 OP 想要的那样生成 .txt 文件。使用:

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

解决方案 4:

使用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,这个可以确保行数最均匀。

解决方案 5:

无论之前的答案是什么,在我的Ubuntu 16.04(Xenial Xerus)上我必须这样做:

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

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

解决方案 6:

我搜索了如何做到这一点,然后来到了这里,因此我也在这里发布了这篇文章供其他人参考:

获取文件的所有内容,这是正确的答案!但是split对于那些只想提取文件的一部分作为文件样本的人来说,使用或:head`tail`

# extract just the **first** 100000 lines of /var/log/syslog into 
# ~/syslog_sample.txt
head -n 100000 /var/log/syslog > ~/syslog_sample.txt

# extract just the **last** 100000 lines of /var/log/syslog into 
# ~/syslog_sample.txt
tail -n 100000 /var/log/syslog > ~/syslog_sample.txt

解决方案 7:

我同意@CS Pei,但这对我不起作用:

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

...因为=后面的内容-b把它搞乱了。相反,我只是删除了它,在它和变量之间不留空格,并使用了小写的“m”:

split -b1m -d file.txt file

为了附加“.txt”,我们使用@schoon 所说的内容:

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

我有一个 188.5MB 的 txt 文件,我使用了此命令 [但针对的-b5m是 5.2MB 的文件],它返回了 35 个拆分文件,除最后一个文件为 5.0MB 外,其余均为 txt 文件,大小均为 5.2MB。现在,由于我希望我的行保持完整,我想每 100 万行拆分一次主文件,但该split命令甚至不允许我这样做,-100000更不用说 " 了-1000000,因此拆分大量行将无法工作。

解决方案 8:

尝试这样的操作:

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

for filename in *.txt; do mv "$filename" "Prefix_$filename"; done;

解决方案 9:

在我的 Linux 系统(Red Hat Enterprise 6.9)上,该split命令没有 或-n的命令行选项--additional-suffix

相反,我用的是这个:

split -d -l NUM_LINES really_big_file.txt split_files.txt.

其中-d是在末尾添加数字后缀split_files.txt.,并-l指定每个文件的行数。

例如,假设我有一个这样的大文件:

$ ls -laF
total 1391952
drwxr-xr-x 2 user.name group         40 Sep 14 15:43 ./
drwxr-xr-x 3 user.name group       4096 Sep 14 15:39 ../
-rw-r--r-- 1 user.name group 1425352817 Sep 14 14:01 really_big_file.txt

该文件有 100,000 行,我想将其拆分为最多 30,000 行的文件。此命令将运行拆分并在输出文件模式的末尾附加一个整数split_files.txt.

$ split -d -l 30000 really_big_file.txt split_files.txt.

生成的文件被正确分割,每个文件最多有 30,000 行。

$ ls -laF
total 2783904
drwxr-xr-x 2 user.name group        156 Sep 14 15:43 ./
drwxr-xr-x 3 user.name group       4096 Sep 14 15:39 ../
-rw-r--r-- 1 user.name group 1425352817 Sep 14 14:01 really_big_file.txt
-rw-r--r-- 1 user.name group  428604626 Sep 14 15:43 split_files.txt.00
-rw-r--r-- 1 user.name group  427152423 Sep 14 15:43 split_files.txt.01
-rw-r--r-- 1 user.name group  427141443 Sep 14 15:43 split_files.txt.02
-rw-r--r-- 1 user.name group  142454325 Sep 14 15:43 split_files.txt.03


$ wc -l *.txt*
    100000 really_big_file.txt
     30000 split_files.txt.00
     30000 split_files.txt.01
     30000 split_files.txt.02
     10000 split_files.txt.03
    200000 total

解决方案 10:

如果每个部分的行数相同,例如 22,那么我的解决方案如下:

split --numeric-suffixes=2 --additional-suffix=.txt -l 22 file.txt file

这样您将获得包含前 22 行的file2.txt 、包含接下来 22 行的file3.txt ,等等。

感谢@hamruta-takawale、@dror-s 和@stackoverflowuser2010

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1120  
  IPD(Integrated Product Development,集成产品开发)流程是一种广泛应用于高科技和制造业的产品开发方法论。它通过跨职能团队的紧密协作,将产品开发周期缩短,同时提高产品质量和市场成功率。在IPD流程中,CDCP(Concept Decision Checkpoint,概念决策检查点)是一个关...
IPD培训课程   75  
  研发IPD(集成产品开发)流程作为一种系统化的产品开发方法,已经在许多行业中得到广泛应用。它不仅能够提升产品开发的效率和质量,还能够通过优化流程和资源分配,显著提高客户满意度。客户满意度是企业长期成功的关键因素之一,而IPD流程通过其独特的结构和机制,能够确保产品从概念到市场交付的每个环节都围绕客户需求展开。本文将深入...
IPD流程   66  
  IPD(Integrated Product Development,集成产品开发)流程是一种以跨职能团队协作为核心的产品开发方法,旨在通过优化资源分配、提高沟通效率以及减少返工,从而缩短项目周期并提升产品质量。随着企业对产品上市速度的要求越来越高,IPD流程的应用价值愈发凸显。通过整合产品开发过程中的各个环节,IPD...
IPD项目管理咨询   76  
  跨部门沟通是企业运营中不可或缺的一环,尤其在复杂的产品开发过程中,不同部门之间的协作效率直接影响项目的成败。集成产品开发(IPD)作为一种系统化的项目管理方法,旨在通过优化流程和增强团队协作来提升产品开发的效率和质量。然而,跨部门沟通的复杂性往往成为IPD实施中的一大挑战。部门之间的目标差异、信息不对称以及沟通渠道不畅...
IPD是什么意思   70  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用