标签: large-files

如何在另一个二进制文件中找到一个二进制文件的偏移量?

我有两个二进制文件。
几百公斤之一,其他几千兆字节。
我想知道整个较小的文件是否包含在较大的文件中,如果是,那么与较大文件开头的偏移量是多少。
我只对精确匹配感兴趣,即整个文件是否包含在另一个文件中。
这两个文件都是二进制文件。
是否有任何现有的工具/单线可以做到这一点?

linux large-files binary files

7
推荐指数
1
解决办法
4667
查看次数

对大型 CSV 文件 (90GB) 进行排序,超出磁盘配额

这是我现在所做的,

sort -T /some_dir/ --parallel=4 -uo file_sort.csv -k 1,3 file_unsort.csv

该文件是 90GB,我收到此错误消息

sort: close failed: /some_dir/sortmdWWn4: Disk quota exceeded

以前,我没有使用 -T 选项,显然 tmp 目录不足以处理这个问题。我当前的目录有大约 200GB 的可用空间。排序临时文件还不够吗?

我不知道并行选项是否会影响事情。

large-files disk-usage sort parallelism

7
推荐指数
1
解决办法
2274
查看次数

copytruncate 如何实际工作?

我们想copytruncate在使用logrotate以下配置旋转文件之前 了解:

/app/syslog-ng/custom/output/all_devices.log { 
size 200M 
copytruncate
dateext 
dateformat -%Y%m%d-%s 
rotate 365 
sharedscripts 
compress
postrotate 
    /app/syslog-ng/sbin/syslog-ng-ctl reload 
endscript 
}
Run Code Online (Sandbox Code Playgroud)

RHEL 7.x,8GB 内存,4 VCpu

题:

logrotate当 syslog-NG 已经打开文件进行日志记录时,如何截断文件?不是资源的争用吗?当文件没有任何记录时,syslog-NG 是否会立即关闭文件?

linux logrotate large-files syslog-ng file-descriptors

7
推荐指数
1
解决办法
4164
查看次数

将行从一个文件复制到另一个文件的简单方法

可能的重复:
cat line X to line Y on a large file

很简单的问题,但似乎找不到简单的解决方法!

我有一个庞大的文本文件,我只需要大约 150 行。线条真的很长,因此在腻子中查看它有点像一场噩梦。我只想将这些行复制到另一个文件中,以便我可以在编辑器中正确查看它。(我无法在编辑器中查看原始文件,因为我的 Windows 机器无法处理它)。

我想要的行从 2000 行左右开始。

谢谢,

large-files text-processing files

6
推荐指数
1
解决办法
11万
查看次数

将大(稀疏)文件 A 的非零块合并到大文件 B

我有来自故障硬盘驱动器的两个部分磁盘映像。文件 B 包含磁盘的大部分内容,在扇区读取失败的地方存在间隙。文件 A 是告诉ddrescue重试所有失败扇区的结果,因此它几乎完全是空白,但包含一些重读成功的地方。我现在需要将文件 A 的有趣内容合并回文件 B。算法很简单:

while not eof(A):
   read 512 bytes from A
   if any of them are nonzero:
       seek to corresponding offset in B
       write bytes into B
Run Code Online (Sandbox Code Playgroud)

可以坐下来自己写这个,但我首先想知道是否其他人已经编写并调试了它。

(更复杂的是,由于空间有限,文件 B 和文件 A 位于两台不同的计算机上——这就是为什么我没有告诉ddrescue首先尝试填补 B 中的空白——但 A 可以是通过网络传输相对容易,稀疏。)

large-files binary files

6
推荐指数
1
解决办法
1268
查看次数

删除导致所有命令挂起的巨大目录

这么大的目录怎么删除呢?

\n
stat session/\n  File: \xe2\x80\x98session/\xe2\x80\x99\n  Size: 321540096       Blocks: 628040     IO Block: 4096   directory\nDevice: 903h/2307d      Inode: 11149319    Links: 2\nAccess: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)\nAccess: 2022-09-29 14:34:40.910894275 +0200\nModify: 2022-09-29 14:35:09.598400050 +0200\nChange: 2022-09-29 14:35:09.598400050 +0200\n Birth: -\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,目录的大小(不是内容,而是目录项本身)超过 300MB。\ninode 数量超过 1100 万个。

\n

该目录没有子目录,只有大量文件。

\n

常用命令都不起作用。我已经尝试过这些:

\n
    \n
  • rsync -a --delete empty_dir/ session/
  • \n
  • rm -rf session
  • \n
  • find . -type f --delete
  • \n
\n

如果我跑ls -f1进去,它就会挂起。

\n

如果我跑mv -- * ../.tmp_to_delete进去,它就会挂起。 …

large-files rm delete

6
推荐指数
1
解决办法
771
查看次数

mmap'd 内存对内存压力的行为

我有一个包含图像文件的大型 tar 文件 (60GB)。我正在使用mmap()整个文件来读取这些随机访问的图像。

我使用mmap()的原因如下:

  1. 线程安全——我无法从多个线程中寻找 ifstream。
  2. 我可以避免额外的缓冲。
  3. 我得到了一些缓存(以已驻留的请求页面的形式。)

问题是当我阅读了那个 60GB 文件中的每个图像时会发生什么?当然,并不是所有的图像都被一次使用——它们被读取、显示,然后被丢弃。

我的mmap()电话是:

mmap(0, totalSize, PROT_READ, MAP_SHARED | MAP_NORESERVE, fd, 0); 
Run Code Online (Sandbox Code Playgroud)

问题是:内核是否看到我映射了由文件支持的只读页面,并在内存压力下简单地清除未使用的页面?我不确定这种情况是否被认可。手册页表明MAP_NORESERVE不需要备份交换空间,但似乎不能保证在内存压力下页面会发生什么。是否有任何保证内核会在它之前清除我不需要的页面,例如清除文件系统缓存或 OOM 的另一个进程?

谢谢!

linux memory large-files mmap

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

Grepping 巨大的文件性能

我有超过 300K 行的 FILE_A 和超过 30M 行的 FILE_B。我创建了一个 bash 脚本,它将 FILE_A 中的每一行 grep 到 FILE_B 中,并将 grep 的结果写入一个新文件。

整个过程需要超过 5 个多小时。

我正在寻找有关您是否看到任何提高脚本性能的方法的建议。

我使用 grep -F -m 1 作为 grep 命令。FILE_A 看起来像这样:

123456789 
123455321
Run Code Online (Sandbox Code Playgroud)

和 FILE_B 是这样的:

123456789,123456789,730025400149993,
123455321,123455321,730025400126097,
Run Code Online (Sandbox Code Playgroud)

因此,使用 bash 我有一个 while 循环,它选择 FILE_A 中的下一行,并在 FILE_B 中将其遍历。当在 FILE_B 中找到模式时,我将其写入 result.txt。

while read -r line; do
   grep -F -m1 $line 30MFile
done < 300KFile
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助。

grep bash large-files algorithms

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

对大文件中的行进行重复数据删除

该文件的大小为 962,120,335 字节。

HP-UX ******B.11.31 U ia64 ***** 无限制用户许可证

hostname> what /usr/bin/awk
/usr/bin/awk:
         main.c $Date: 2009/02/17 15:25:17 $Revision: r11.31/1 PATCH_11.31 (PHCO_36132)
         run.c $Date: 2009/02/17 15:25:20 $Revision: r11.31/1 PATCH_11.31 (PHCO_36132)
         $Revision: @(#) awk R11.31_BL2010_0503_1 PATCH_11.31 PHCO_40052
hostname> what /usr/bin/sed
/usr/bin/sed:
         sed0.c $Date: 2008/04/23 11:11:11 $Revision: r11.31/1 PATCH_11.31 (PHCO_38263)
         $Revision: @(#) sed R11.31_BL2008_1022_2 PATCH_11.31 PHCO_38263
 hostname>perl -v
    This is perl, v5.8.8 built for IA64.ARCHREV_0-thread-multi
hostname:> $ file /usr/bin/perl
/usr/bin/perl:  ELF-32 executable object file - IA64
hostname:> $ file /usr/bin/awk
/usr/bin/awk:   ELF-32 executable …
Run Code Online (Sandbox Code Playgroud)

large-files text-processing deduplication

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

当 awk 太慢时,基于字段拆分大文件的最佳方法

我在处理巨大的 .gz 文件(大于 500G)时遇到问题。我的目标是通过这些文件中的第 4 个字段拆分这些文件中的每一个。我以前用过这个漂亮的 awk one-liner 来做到这一点:

zcat file.txt.gz | awk 'NR>1{print >  $4}'
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这需要很长时间才能处理大文件,所以我试图首先按大小拆分它们,然后在按字段拆分后连接每个文件。我可以使用以下方法拆分它们:

i=file.txt.gz
dir=$i
mkdir -p $dir
cd $dir
split -b 200M ../$i $i

for file in `ls *`; do zcat $file | awk 'NR>1{print >  $4}'; done
Run Code Online (Sandbox Code Playgroud)

但是我如何通过第 4 个字段连接所有正确的文件?另外,真的没有更好的方法来做到这一点吗?当我使用这样的 gz 文件拆分时,我也遇到了一个错误,比如“文件意外结束”,所以我想我的拆分也是错误的,但我不确定我是否朝着正确的方向前进,如果你有建议会很有帮助。

非常感谢你的帮忙!弗拉

large-files awk gzip text-processing split

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