标签: large-files

cat line X 到 line Y 在一个大文件上

说我有一个巨大的文本文件(> 2GB),我只是想catXY(如57890000至57890010)。

据我所知,我可以通过管道head输入tail或反之亦然来做到这一点,即

head -A /path/to/file | tail -B
Run Code Online (Sandbox Code Playgroud)

或者

tail -C /path/to/file | head -D
Run Code Online (Sandbox Code Playgroud)

其中ABCD可以根据文件中的行数计算得出,XY

但是这种方法有两个问题:

  1. 你必须计算ABCD
  2. 这些命令可以pipe相互发送比我感兴趣的多得多的行(例如,如果我只读取大文件中间的几行)

有没有办法让 shell 只使用并输出我想要的行?(同时仅提供XY)?

large-files tail cat head

171
推荐指数
5
解决办法
32万
查看次数

如何删除文本文件中的重复行?

我的一个巨大的(最多 2 GiB)文本文件包含其中每一行的大约 100 个精确副本(在我的情况下没用,因为该文件是一个类似 CSV 的数据表)。

我需要的是在保持原始序列顺序的同时删除所有重复(最好,但可以为了显着的性能提升而牺牲)。结果中的每一行都是唯一的。如果有 100 条相等的行(通常重复项分布在整个文件中并且不会是邻居),则只剩下一种。

我已经用 Scala 编写了一个程序(如果您不了解 Scala,请考虑使用 Java)来实现这一点。但也许有更快的 C 编写的本地工具能够更快地做到这一点?

更新:awk '!seen[$0]++' filename只要文件接近 2 GiB 或更小,该解决方案似乎对我来说很好用,但现在我要清理 8 GiB 文件,它不再起作用。在配备 4 GiB RAM 的 Mac 和配备 4 GiB RAM 和 6 GiB 交换的 64 位 Windows 7 PC 上,似乎无穷无尽,只是内存不足。鉴于这种经验,我并不热衷于在具有 4 GiB RAM 的 Linux 上尝试它。

large-files text-processing files

170
推荐指数
5
解决办法
23万
查看次数

在一个巨大的 (70GB)、一行、文本文件中替换字符串

我有一个巨大的(70GB)一行文本文件,我想替换其中的一个字符串(令牌)。我想<unk>用另一个虚拟令牌(手套问题)替换令牌。

我试过sed

sed 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new
Run Code Online (Sandbox Code Playgroud)

但输出文件corpus.txt.new有零字节!

我也尝试过使用 perl:

perl -pe 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new
Run Code Online (Sandbox Code Playgroud)

但我遇到了内存不足错误。

对于较小的文件,上述两个命令都有效。

如何替换字符串是这样的文件? 是一个相关的问题,但没有一个答案对我有用。

编辑:如何将文件拆分为 10GB(或其他任何大小)的块并应用sed到其中的每一个然后将它们合并cat?那有意义吗?有没有更优雅的解决方案?

sed large-files text-processing

129
推荐指数
11
解决办法
3万
查看次数

有没有办法就地修改文件?

我有一个相当大的文件(35Gb),我想就地过滤这个文件(即我没有足够的磁盘空间来存放另一个文件),特别是我想 grep 并忽略一些模式 - 有没有办法在不使用其他文件的情况下执行此操作?

假设我想过滤掉所有包含foo:例如...

grep large-files text-processing

62
推荐指数
8
解决办法
2万
查看次数

区分两个大文本文件

我有两个大文件(每个 6GB)。它们是未排序的,以换行符 ( \n) 作为分隔符。我该如何区分它们?应该不到 24 小时。

performance diff large-files

41
推荐指数
2
解决办法
5万
查看次数

在非常大的文件中快速替换文本

我有 25GB 的文本文件,只需要在几行中替换一个字符串。我可以sed成功使用,但需要很长时间才能运行。

sed -i 's|old text|new text|g' gigantic_file.sql
Run Code Online (Sandbox Code Playgroud)

有没有更快的方法来做到这一点?

sed large-files replace

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

通过 ssh 传输大 (8 GB) 文件

我用 SCP 试过了,但它说“负文件大小”。

>scp matlab.iso xxx@xxx:/matlab.iso
matlab.iso: Negative file size
Run Code Online (Sandbox Code Playgroud)

还尝试使用 SFTP,工作正常,直到 2 GB 的文件传输完毕,然后停止:

sftp> put matlab.iso
Uploading matlab.iso to /home/x/matlab.iso
matlab.iso                                           -298% 2021MB -16651.-8KB/s   00:5d
o_upload: offset < 0
Run Code Online (Sandbox Code Playgroud)

知道有什么问题吗?SCP 和 SFTP 不支持大于 2 GB 的文件吗?如果是这样,那么我如何通过 SSH 传输更大的文件?

目标文件系统是 ext4。Linux 发行版是 CentOS 6.5。文件系统当前有(可访问的)大文件(最多 100 GB)。

scp sftp large-files

30
推荐指数
3
解决办法
7万
查看次数

创建文件系统时的大文件功能

在为包含 flac 格式的视频和音频等大文件的分区创建文件系统时,使用-T largefile标志有用吗?

我使用该标志和不使用该标志测试了相同的分区,并使用tune2fs -l [partition],我检查了启用了“large_file”的“文件系统功能”。那么,没有必要使用-T 标志 largefile吗?

filesystems large-files ext4 ext2 ext3

20
推荐指数
2
解决办法
3万
查看次数

为什么 ext4 卷中的这些文件是碎片化的?

ext4在一个(磁性)硬盘驱动器上有一个 900GB 的分区,它没有缺陷也没有坏扇区。除了一个空lost+found目录外,该分区完全是空的。该分区使用默认参数进行格式化,但我将保留文件系统块的数量设置为 1%。

xubuntu-15.04-desktop-amd64.iso使用wget. 下载完成后,发现文件被分成了四个片段:

filefrag -v /media/emma/red/xubuntu-15.04-desktop-amd64.iso
Filesystem type is: ef53
File size of /media/emma/red/xubuntu-15.04-desktop-amd64.iso is 1009778688 (246528 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..   32767:      34816..     67583:  32768:            
   1:    32768..   63487:      67584..     98303:  30720:            
   2:    63488..   96255:     100352..    133119:  32768:      98304:
   3:    96256..  126975:     133120..    163839:  30720:            
   4:   126976..  159743:     165888..    198655:  32768:     163840:
   5:   159744..  190463:     198656..    229375:  30720:            
   6:   190464..  223231:     231424.. …
Run Code Online (Sandbox Code Playgroud)

filesystems large-files ext4

19
推荐指数
2
解决办法
2595
查看次数

如何就地编辑大文件?

我有几个文件大小 > 1 GB。我需要从文件中删除最后几个字节。我该怎么做?我更喜欢就地编辑文件以节省磁盘空间。

我在 HP-UX 上。

editors large-files hp-ux files

18
推荐指数
4
解决办法
7964
查看次数

标签 统计

large-files ×10

text-processing ×3

ext4 ×2

files ×2

filesystems ×2

sed ×2

cat ×1

diff ×1

editors ×1

ext2 ×1

ext3 ×1

grep ×1

head ×1

hp-ux ×1

performance ×1

replace ×1

scp ×1

sftp ×1

tail ×1