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

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

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用