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

2024-10-31 08:38:00
admin
原创
184
摘要:问题描述:我得到一个文本文件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

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1325  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。它涵盖了从产品概念产生到产品退市的整个生命周期,通过整合跨部门团队、优化流程等方式,显著提升产品开发的效率和质量,进而为项目的成功奠定坚实基础。深入探究IPD流程的五个阶段与项目成功之间...
IPD流程分为几个阶段   4  
  华为作为全球知名的科技企业,其成功背后的管理体系备受关注。IPD(集成产品开发)流程作为华为核心的产品开发管理模式,其中的创新管理与实践更是蕴含着丰富的经验和深刻的智慧,对众多企业具有重要的借鉴意义。IPD流程的核心架构IPD流程旨在打破部门墙,实现跨部门的高效协作,将产品开发视为一个整体的流程。它涵盖了从市场需求分析...
华为IPD是什么   3  
  IPD(Integrated Product Development)研发管理体系作为一种先进的产品开发模式,在众多企业的发展历程中发挥了至关重要的作用。它不仅仅是一套流程,更是一种理念,一种能够全方位提升企业竞争力,推动企业持续发展的有效工具。深入探究IPD研发管理体系如何助力企业持续发展,对于众多渴望在市场中立足并...
IPD管理流程   3  
  IPD(Integrated Product Development)流程管理旨在通过整合产品开发流程、团队和资源,实现产品的快速、高质量交付。在这一过程中,有效降低成本是企业提升竞争力的关键。通过优化IPD流程管理中的各个环节,可以在不牺牲产品质量和性能的前提下,实现成本的显著降低,为企业创造更大的价值。优化产品规划...
IPD流程分为几个阶段   4  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用