标签: csplit

将一个文件一分为二

我有一个大文件,需要拆分成两个文件。假设在第一个文件中应该选择 1000 行并将其放入另一个文件中并删除第一个文件中的那些行。

我尝试使用,split但它正在创建多个块。

awk text-processing split csplit

34
推荐指数
4
解决办法
7万
查看次数

使用 csplit 排除分隔符

是否可以使用 csplit 删除分隔符?例子:

$ cat in
abc
---
def
---
ghi
$ csplit -q in /-/ '{*}'
$ ls x*
xx00  xx01  xx02
$ head xx*
==> xx00 <==
abc

==> xx01 <==
---
def

==> xx02 <==
---
ghi
Run Code Online (Sandbox Code Playgroud)

而不是它所做的,即拆分并保留分隔符,是否可以要求它拆分并删除分隔符?

也就是说,所需的输出是这样的:

$ sed -i '/-/d' xx*
$ head xx*
==> xx00 <==
abc

==> xx01 <==
def

==> xx02 <==
ghi
Run Code Online (Sandbox Code Playgroud)

虽然可以像上面那样分两步完成,但是可以一步完成吗?

如果不能用 csplit 完成,有没有比上面的两个调用(csplit + sed)更短的一步法?不偏爱使用的工具,只要它具有合理的可读性。

csplit

7
推荐指数
2
解决办法
1801
查看次数

csplit 无法识别提供的正则表达式

我正在处理这个包含其他几个文件的大文件(DATA.DAT,~900MB)。它来自PS2游戏。

声音样本(.AIFF格式),正是我所追求的,构成了它的大部分大小。

在网上搜索 PS2 .DAT提取器后,我发现它们基本上依赖于开发人员,并且由于该游戏/工具相当晦涩,而且在网上找不到太多相关信息,因此我想自己实现该过程的自动化。

在十六进制编辑器上检查文件时,我发现了一些.AIFF标头,将这些块克隆到新的.AIFF文件中,无需任何进一步的工作,它们就可以播放了。

花了一段时间从我非常有限的 bash 知识中摆脱了生锈并在这里阅读了类似的问题,我想出了这个表达:

gcsplit -f "sample-" -b "%04d.aif" DATA.DAT /FORM/ '{*}'
Run Code Online (Sandbox Code Playgroud)

(我在 OSX 上使用 coreutils,因此 csplit 上有 g- 前缀)

鉴于.AIFF文件以字符串“FORM”开头,并且文件中的所有样本基本上都彼此相邻(由不会在样本上产生不需要的末端噪声的可忽略数量的数据隔开),我认为正则表达式

/FORM/
Run Code Online (Sandbox Code Playgroud)

将足以拆分文件。

但是,每个拆分文件都带有垃圾数据,这些数据位于.AIFF标头之前的声音样本之间,使其无法播放。

下面是分割声音样本的十六进制数据的屏幕截图:

坏分裂

这个实际示例大约开始于 1500 字节标记:

样本

是什么让这个表达式用偏移量分割文件?

osx csplit

5
推荐指数
1
解决办法
599
查看次数

如何在出现N次模式后将文件拆分为多个文件?

我在 Linux 上有一个文件,其中包含数千个分子的坐标。每个分子都以包含始终相同模式的一行开始:

@<TRIPOS>MOLECULE
Run Code Online (Sandbox Code Playgroud)

然后继续其他行。我想将文件拆分为多个文件,每个文件包含一定数量的分子。什么是最简单的方法来做到这一点?

awk text-processing csplit

3
推荐指数
1
解决办法
169
查看次数

将一个文本文件拆分为多个文件,超出 csplit 的 {99} 限制

我想将 .txt 文件的内容拆分为多个文件,但我遇到了关于 csplit 限制的两个问题:

(1) 任何人都可以提供绕过 csplit '99' 文件拆分的最大限制的方法吗?我有一个基于重复出现的空行或字符最多可拆分 384 个的文件。我希望 csplit 能够使用 {*} 来适应这一点,但这超出了 csplit 的固有文件生成能力。

(2) 有没有人知道将文件内容传递给 csplit(管道到 csplit)的方法,或者 csplit 只能以其传统的方式调用文件吗?即csplit -f split_name file_to_split.txt /split/ {*}[series of commands] | csplit -f split_name /split/ {*}

感谢您提供任何建议或完成类似任务的替代方法。

osx csplit

2
推荐指数
1
解决办法
6342
查看次数

如何在 Mac 上使用现代 coreutils?

如何在 Mac 上获取现代 coreutils?


我使用以下方法遇到了这个问题csplit

foo.txt:

foo
1
foo
2
foo
3
Run Code Online (Sandbox Code Playgroud)
$: csplit foo '^foo$' '{*}'
# error
Run Code Online (Sandbox Code Playgroud)

仔细检查Mac 上的manpage, man csplit,csplit是 FreeBSD 版本,并且不提供该'{*}'选项。事实上,我必须提前提供准确的分割次数。这要么会触发czplit我重新实现,要么我可以GNU coreutils在 mac 上登录。

有办法吗?

coreutils csplit macos

2
推荐指数
1
解决办法
983
查看次数

标签 统计

csplit ×6

awk ×2

osx ×2

text-processing ×2

coreutils ×1

macos ×1

split ×1