使用bash处理大量数据

时间:2015-11-28 17:40:20

标签: linux bash unix awk bigdata

我必须使用bash脚本处理文件夹中的大量txt文件。 每个文件包含数百万行,它们的格式如下:

文件#1:

$data = file_get_contents(json_decode(urldecode(base64_decode($_POST["data"]))));
$text = $data->text;

文件#2:

en ample_1 200
it example_3 24
ar example_5 500
fr.b example_4 570
fr.c example_2 39
en.n bample_6 10

...

我必须按“en”或“en.n”进行过滤,在第二列中找到重复的出现次数,求和第三列并得到一个这样的排序文件:

de example_3 4
uk.n example_5 50
de.n example_4 70
uk example_2 9
en ample_1 79
en.n bample_6 1

这是我的剧本:

en ample_1 279
en.n bample_6 11

一切正常,但执行需要很长时间。有没有人知道如何以更少的时间和更少的代码行获得相同的结果?

1 个答案:

答案 0 :(得分:7)

UNIX shell是一个操作文件和进程以及对工具进行调用的环境。 shell调用操作文本的UNIX工具是awk所以只需使用它:

$ awk '$1~/^en(\.n)?$/{tot[$1" "$2]+=$3} END{for (key in tot) print key, tot[key]}' file | sort
en ample_1 279
en.n bample_6 11

你的脚本有很多问题无法评论,这表明你是shell编程的初学者 - 获得由Chris Johnson撰写的Bash Shell Scripting Recipes和Arnold Robins的第四版Effective Awk编程。