2013-12-01 4 views
3

Awk обрабатывает файлы по строкам. Предполагая, что каждая операция линии не зависит от других строк, существует ли способ заставить awk обрабатывать несколько строк одновременно параллельно? Есть ли другой инструмент обработки текста, который автоматически использует параллелизм и обрабатывает данные быстрее?Параллельная обработка в awk?

ответ

3

Единственная реализация awk, которая пыталась обеспечить параллельную реализацию awk, была parallel-awk, но похоже, что проект уже мертв.

В противном случае одним из способов распараллеливания awk является разделение вашего ввода на куски и обработка их параллельно. Однако разделение входных данных по-прежнему будет однопоточным, что может привести к поражению цели повышения производительности, основная проблема заключается в том, что стандартная команда split не может разделить границы строк без чтения каждой строки.

Если у вас есть GNU раскол доступны, или версию, которая поддерживает опцию -n l/*, вот один оптимизированный способ обработки файла параллельно, предполагая, что здесь у вас есть 8 виртуальных процессоров:

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$$* 
0

Вы можете использовать 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}'

+0

Я попытался это решение, но похоже, что это не работает, как ожидалось, не могли бы вы ответить на этот вопрос - Http: // StackOverflow. com/questions/41921522/parallel-execute-of-unix-command –

+0

У меня была такая же проблема. Мне пришлось избегать многих вещей, поскольку у меня был большой скрипт awk. Лучший способ решить это - сохранить тело awk-скрипта, а затем передать его awk в параллель. См. Более ссылку ниже, где я нашел решение http://codextechnicanum.blogspot.in/2013/10/awk-and-gnu-parallel-problems-with.html – Fear

Смежные вопросы