首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在awk中进行并行处理?

在awk中进行并行处理?
EN

Stack Overflow用户
提问于 2013-12-01 11:37:37
回答 2查看 9.1K关注 0票数 8

Awk逐行处理文件。假设每一行操作都不依赖于其他行,有没有办法让awk一次并行处理多行?有没有其他的文本处理工具可以自动利用并行性来更快地处理数据?

EN

回答 2

Stack Overflow用户

发布于 2013-12-01 17:55:12

唯一一个尝试提供awk并行实现的awk实现是parallel-awk,但是现在看来这个项目已经死了。

否则,将awk并行化的一种方法是将输入拆分成块,然后并行处理它们。但是,拆分输入数据仍然是单线程的,因此可能无法实现性能增强目标,主要问题是标准split命令无法在不读取每一行的情况下在行边界处拆分。

如果你有可用的GNU,或者一个支持-n l/*选项的版本,这里有一个并行处理你的文件的优化方法,假设你有8个vCPU:

代码语言:javascript
复制
inputfile=input.txt
outputfile=output.txt
script=script.awk
count=8

split -n l/$count $inputfile /tmp/_pawk$$
for file in /tmp/_pawk$$*; do
    awk -f script.awk $file > ${file}.out &
done
wait
cat /tmp/_pawk$$*.out > $outputfile
rm /tmp/_pawk$$*
票数 6
EN

Stack Overflow用户

发布于 2014-12-24 21:20:01

您可以使用GNU Parallel来实现此目的

假设您正在计算一个大文件中的数字总和:

cat rands20M.txt | awk '{s+=$1} END {print s}'

使用GNU并行,您可以在多个线程中执行此操作:

cat rands20M.txt | parallel --pipe awk \'{s+=\$1} END {print s}\' | awk '{s+=$1} END {print s}'

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20308443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档