当前位置: 首页 > 科技观察

在Linux中拆分和重组文件

时间:2023-03-14 21:09:43 科技观察

非常有用的csplit命令可以将单个文件拆分为多个文件。卡拉施罗德解释道。Linux有几个用于拆分文件的实用程序。那么为什么要拆分文件呢?一个用例是将一个大文件拆分成更小的文件,以便它适合更小的存储介质,如USB记忆棒。当您遇到FAT32(最大4GB文件大小)并且您的文件大于此大小时,通过USB传输文件也是一个好技巧。另一个用例是加速网络文件传输,因为小文件的并行传输通常更快。我们将学习如何使用csplit、split和cat在合并文件之前重新排列文件。这些操作适用于任何文件类型:文本、图像、音频文件、ISO图像等。使用csplit拆分文件csplit是您随身携带的有趣小命令之一,一旦开始使用它,您就离不开它它。csplit将单个文件拆分为多个文件。这个示例演示了最简单的用法,将文件foo.txt拆分为三个文件,在第17行和第33行拆分:$csplitfoo.txt1733259138892359csplit在当前目录中创建三个新文件,开头为Printoutthe分节的新文件。默认情况下,每个新文件名为xx_nn:$lsxx00xx01xx02您可以使用head命令查看每个新文件的前十行:$headxx*==>xx00<==FooFilebyCarlaSchroderFootextFoosubheadingMorefootext==>xx01<==FootextFoosubheadingMorefootext==>xx02<==FootextFoosubheadingMorefootex如果想把文件拆分成行数相同的多个文件怎么办?您可以指定行数,然后将重复次数放在花括号中。此示例重复拆分4次并将其余部分转储到最后一个文件中:$csplitfoo.txt5{4}57148824918663798您可以使用星号通配符告诉csplit尽可能多次重复拆分。这听起来很酷,但如果不能对文件进行均分,它可能会失败(LCTT译注:csplit的低版本不支持该参数):$csplitfoo.发生错误时的输出文件。您可以使用-k选项修复此问题,该选项不会在出现错误时删除输出文件。另一个行为是每次运行csplit时它都会覆盖以前创建的文件,因此您需要使用新文件名单独保存它们。使用--prefix=_prefix_设置不同的文件前缀:$csplit-k--prefix=minefoo.txt5{*}5714882491866993csplit:'5':linenumberoutofrangeonrepetition9437$lsmine00mine01mine02mine03mine04mine05选项-n可用于更改用于编号的数字filesNumber(默认2位数):$csplit-n3--prefix=minefoo.txt5{4}571488249186613813798$lsmine000mine001mine002mine003mine004mine005csplit中的“c”表示上下文。这意味着您可以根据任意匹配项或巧妙的正则表达式来拆分文件。以下示例将文件分为两部分。第一个文件在第一次出现“fie”之前的行结束,第二个文件以包含“fie”的行开始。$csplitfoo.txt/fie/在每次出现“fie”时拆分文件:$csplitfoo.txt/fie/{*}在前五次出现“fie”时拆分文件:$csplitfoo.txt/fie/{5}仅复制如果内容以包含“fie”的行开头,并省略其前面的所有内容:$csplitmyfile%fie%将文件拆分为不同大小的split类似于csplit。它将文件拆分为特定大小,这在您将大文件拆分为较小的多媒体文件或通过网络发送它们时非常有用。默认大小为1000行:$splitfoo.mv$ls-hl266KAug2116:58xaa267KAug2116:58xab315KAug2116:58xac[…]它们拆分成相似的大小,但您可以指定任何您想要的大小。在本例中20M字节:$split-b20Mfoo.mv大小单位缩写为K、M、G、T、P、E、Z、Y(1024的幂)或KB、MB、GB等(1000的幂)).选择您自己的文件名前缀和后缀:$split-a3--numeric-suffixes=9--additional-suffix=minefoo.mvSB240KAug2117:44SB009mine214KAug2117:44SB010mine220KAug2117:44SB011mine-a选项控制数字的数字位置。--numeric-suffixes设置编号的起始值。默认前缀是x,您也可以通过在文件名后键入它来设置不同的前缀。合并拆分文件您可能希望在某个时候重新组织您的文件。这里使用了常用的cat命令:$catSB0*>foo2.txt示例中的星号通配符将匹配所有以SB0开头的文件,这可能无法满足您的需求。您可以使用问号通配符进行更精确的匹配,每个字符使用一个问号:$catSB0??????>foo2.txt一如既往,请查阅相关的手册页和信息页以获取完整的命令选项。