Awk逐行处理文件。假设每一行操作都不依赖于其他行,有没有办法让awk一次并行处理多行?有没有其他的文本处理工具可以自动利用并行性来更快地处理数据?
发布于 2013-12-01 17:55:12
唯一一个尝试提供awk并行实现的awk实现是parallel-awk,但是现在看来这个项目已经死了。
否则,将awk并行化的一种方法是将输入拆分成块,然后并行处理它们。但是,拆分输入数据仍然是单线程的,因此可能无法实现性能增强目标,主要问题是标准split命令无法在不读取每一行的情况下在行边界处拆分。
如果你有可用的GNU,或者一个支持-n l/*选项的版本,这里有一个并行处理你的文件的优化方法,假设你有8个vCPU:
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$$*发布于 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}'
https://stackoverflow.com/questions/20308443
复制相似问题