- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有几个巨大的制表符分隔文件 @ ~2.1 TB,~8500 行,~3930 万列。第一列全部为变长字符串(ID),其余为零后三位非负固定精度小数(即ID后每列5个字符长0.000)。
在具有 256GB RAM 的 Linux 机器中转置文件的最有效方法是什么?最终,在转置之后,我想将文件分成 500K 行,以便我可以开始处理它。硬盘没问题,有70TB可用空间。
这是我能想到的(每个文件大约需要 2.5 天)。问题是每个文件的行数和列数都略有不同。我不想在每次运行时都修改脚本。或者,我可以编写专门的 C 程序来执行此操作,但我不愿意这样做。
#!/bin/bash
i=$1
mkdir temp-$i
cd temp-$i
echo "Splitting $i"
split -dl 1 -a 4 ../$i
echo "Transposing all lines"
for a in x???? ; do
cat $a | sed 's/\t/\n/g' > $a.txt
mv $a.txt $a
done
echo "Joining all columns"
# Here's where it gets really ugly:
paste x0000 x0001 ... x0999 > a.txt
paste x1000 x1001 ... x1999 > b.txt
paste x2000 x2001 ... x2999 > c.txt
paste x3000 x3001 ... x3999 > d.txt
paste x4000 x4001 ... x4999 > e.txt
paste x5000 x5001 ... x5999 > f.txt
paste x6000 x6001 ... x6999 > g.txt
paste x7000 x7001 ... x7999 > h.txt
paste x8000 x8001 ... x8499 > i.txt
paste ../colinfo-$i.txt a.txt b.txt c.txt d.txt e.txt f.txt g.txt h.txt i.txt > ../tr-$i.txt
cd ../
rm -Rf temp-$i
最佳答案
粘贴操作会降低您的性能。如何只创建与列一样多的文件,然后通过输入文件单次传递,将数据写入列文件。即:
输入文件:
ID data1 data2 data3 .... data5000
94239 0.001 0.002 0.003 .... 5.000
43244 0.011 0.012 0.013 .... 5.010
输出文件:
col0:
ID 94239 43244
col1:
data1 0.001 0.011
...这里还有 4999 个文件...
col5000:
data5000 5.000 5.010
可以使用这个 perl 程序来拆分列:
#!perl -n
use strict;
use warnings;
use File::Path 'make_path';
$INPUT_RECORD_SEPARATOR = "\t";
my $colno = 0;
my $maxcol = 0;
while(my $col = <STDIN>) {
$colno = 0 if $col =~ s/\n//;
$colno++;
my $path = join '/', $colno =~ /(\d{3})/g;
if($colno > $maxcol) {
make_path $path;
$maxcol = $colno;
}
open my $OUT, '>>', "$path/col.tsv";
print $OUT "$col\t";
close $OUT;
}
(未经测试!)
然后最后将文件连接在一起:
cat col0 col1 ... col5000 > newfile.tsv
(可能需要xargs
。)
关于bash - 转置巨大制表符分隔文件 (2.1TB) @ 8.5Kx39M 的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15796628/
我有一个示例代码如下: #include template class B { public: B() : t1_(*this) {} void Test() { t1_.Test
所以我有以下代码,它给出了类型不匹配编译器错误,但我不知道为什么: [] member this.TheTest() = let tuple = (DateTime.Now, 10)
我遇到了一个问题,我们必须在 1 TB 的文件或字符串中找到最常用的 10 个单词。 我能想到的一个解决方案是使用哈希表(单词、计数)和最大堆。但是,如果单词是唯一的,则拟合所有单词可能会导致问题。我
System.out.format("%tB",12); 我应该从中得到一个“十二月”,但是我得到了一个很好的异常(exception) Exception in thread "main" java
我有数 TB 的文件和数据库转储,需要异地备份。 实现这一目标的最佳方法是什么? 我目前正在权衡 rsyinc 到 Amazon EBS 或获取设备(例如梭鱼)。 我调用我的一个 friend ,他说
我最近采访了一个在亚马逊工作的人,他问我:我将如何使用编程语言对 TB 级的数据进行排序? 我是一个 C++ 人,当然,我们谈到了合并排序,其中一种可能的技术是将数据拆分成更小的大小并对每个数据进行排
目前我有一个将字节转换为 TB 的函数。 我使用下面的公式进行转换。 const formatBytesToTB = (a, b = 2) => { if (a === 0) { retu
我正在尝试使用 Twitter Bootstrap 构建模板。 Here是活生生的例子。我遇到的问题是我可以将 dashboard div 放在 sidebar 菜单旁边,但我不知道我的错误在哪里?我
我刚发现一个有趣的博客,谈论一些面试问题。其中一个问题是: Given a very large file (multiple TB), detect what 4MB ranges has chan
转储大型(TB)数据库的最佳方法是什么?除了 mysqldump 之外还有其他更快/更有效的方法吗?这是为了压缩、解压缩,然后重新导入到另一台服务器上的另一个 mysql 数据库中。 最佳答案 如果您
我正在尝试为一个巨大的数据集(TB 级数据)计算分位数(可以通过一些精度保证或误差界限来近似)。我怎样才能有效地计算分位数。要求是 1) Can be computed efficiently (on
当乘以非常大的数字时,您使用基于 FFT 的乘法(参见 Schönhage–Strassen algorithm)。出于性能原因,我正在缓存旋转因子。问题是对于巨大的数字(千兆字节大小)我需要大小为
我正在尝试了解 QEMU 的区 block 链。我对每个执行的 TB 的分支方向有疑问。假设 TB#1 现在已经执行,并找到 next_tb (TB#2)。然后我们知道方向是 TB#1--->TB#2
如何获取 jqPlot y 轴值(以 KB/MB/GB/TB 为单位)。我有数据节点记录,例如 -不。一天中读取和写入的字节数,并通过 JqPlot 绘制它。但我希望我的 y 轴应包含带有 KB/MB
所以,我有几个大约 1 TB 的系统备份镜像文件,我想快速计算它们每个的哈希值(最好是 SHA-1)。 一开始我尝试计算 md5 哈希值,2 小时过去了,哈希值还没有计算出来(对于高达 1TB 的大文
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 8 年前。 Improv
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 8年前关闭。 Improve this questi
哪种数据库最适合以下场景: 我创建了一个 Java 应用程序,它将音频调用存储到本地文件系统。为了播放音频通话,该应用程序从数据库 (MySQL) 检索元数据,该数据库有一列包含本地 HD 上通话的位
我正在使用 Drupal 和 TB mega 菜单开发一个网站作为我的主菜单,当我使用 Devel 检查执行时间时,我发现 TB mega 菜单在以下查询中花费了大约 23978.991 毫秒: tb
我的 C 语言 (linux) 应用程序至少需要 1 TB 的内存。8 TB 将是最好的。我怎样才能在服务器中支持这样的内存容量?一种方法是构建我自己的 PCI 卡并放入 128 GB DDR4 模块
我是一名优秀的程序员,十分优秀!