有很多时候,处理一个大文件,常规命令并不能很好的利用多核
How to Sort a Very Very Very Big File
sort -uo 一个1T的文件,让最高配的google cloud instance (48 core/512G)崩溃了~~~,可惜了我的$30,白白跑了那么长时间~~~
网上搜索都是how to sort a big file,那我这个属于very very very big big big file了~~
不管是并行也好,管道也好,用了各种奇技淫巧就是敌不过人家 very very big~
不要跟我谈什么外排,归并,位图,bloom filter,redis hash去重,我就是不想折腾,最后只有分割手动外排搞定~~
把大象装进冰箱分为几步?
三步:
1 2 3 4 5 |
|
小TIPS:
如果只要去重不要排序的话,尽量不要用 sort -u或者sort | uniq,这个是nLog(n)的效率,让人捉急。 |
可以利用awk的数组是内存hash表的特性,直接awk来做,前提是你内存够大,瞎估估需要十倍于数据的内存吧:
1
|
|
PS:
我后来又看了一下GNU Sort的实现描述,它说已经用了外排了,但是实际使用还是不给力,暂时迷惑中
How to Get Intersection of Two Big Files
两个大文件,a.txt和b.txt两个文件的数据都是逐行呈现的, 如何求他们的交集、并集和差集。
用sort+uniq直接搞定:
交集
1 2 3 |
|
并集
1
|
|
差集
1 2 3 |
|
- 在开搞 bloom filter或者bitmap 或者grep -f之前可以先组合工具来一个
How to Parallel All Cmds for Linux
grep 一个100GB的文件总是很有压力,怎么才能提速呢?
瞎优化
1
|
|
-
LC_ALL=C
比LC_ALL=UTF-8
要块 -
不需要正则的话,用fgrep可以提速
不过这样优化总是治标不治本,下面隆重推出linux 里面parallel all cmds的perl工具
1
|
|
使用parallel ,和不使用parallel直接grep。结果显而易见,相差 20 倍。这比用啥 ack,ag优化效果明显多了
xargs也有一个-n的多核选项,可以作为备用
1 2 3 4 5 |
|
这一条xargs把每个echo的数作为参数传给sleep ,所以一共sleep了 1+2+3+4+5=15秒。
如果使用 -P 参数分给5个核,每个核各sleep 1,2,3,4,5秒,所以执行完之后总共sleep的5秒。
1 2 3 4 5 |
|
- 引自:
https://www.jianshu.com/p/c5a2369fa613
How to Calling Multiple Commands Through Xargs
有时候想在xargs后面接多条命令,这个时候直接加;
是不行的,要这样做:
1
|
|
How to Compress All Find Files to Single Line Argv
有时候find的所有文件要合并为一个argv管道到一个命令里面:
1
|
|
How to Sort Big Files
在linux要排序一个100G的文件,压力比较大
并行解决之:
1
|
|
注意这一招在管道里面行不通,所以要用管道的话一定要先重定向到一个文件里面中转一下。
A Strange Bitcoin Transaction
在之前的谈谈比特币的地址安全问题这篇文章中,我们谈到一个名为”LBC”的项目,这个项目通过暴力碰撞企图打捞到一些什么东西。
令人惊奇的是,他们真的碰到了几个地址。对他们最近发现的4个地址做了一下分析,发现了更让人惊奇的事情。
他们最近的四个发现是:
How to Dump Csv From Sqlite3
1 2 3 4 5 6 7 8 |
|
寻找并删除Git记录中的大文件
有时候gitignore没做好,一不小心就又进来一个二进制文件
在重复了N次Google之后,还是记一下吧