Строка xargs, используемая в качестве входных данных для agrep

Ребята, я использую xargs, чтобы передать ввод для agrep. Я использую xargs, как показано ниже

Script:    
xargs -L 1 -I string echo "RequestId="string | xargs -L 1 -I string zcat FILEB | agrep -dEOE string


Output till "RequestId="string
RequestID=543214324
RequestID=512121221
RequestID=521212121

Моя цель состоит в том, чтобы закрепить эти идентификаторы запроса в другом файле "Файл B". Так как этот файл заархивирован, мне нужно использовать zcat перед выполнением agrep... Но если я делаю это, я получаю неверные результаты... Последняя "строка", которую я использую в agrep, не является правильной. Любые предложения по этому поводу были бы весьма полезно.

1 ответ

Не совсем понятно, что вы хотите. Я предполагаю, что у вас есть файл FILEA, содержащий:

543214324
512121221
521212121

и что вы хотите agrep FILEB.gz для:

RequestID=543214324
RequestID=512121221
RequestID=521212121

FILEBB.gz разархивирован, так что вам нужно zcat распаковать его, и вы не можете использовать zgrep, потому что вы зависите от функции, найденной только в agrep,

Используя GNU Parallel вы можете сделать:

cat FILEA | parallel zcat FILEB.gz \| agrep -dEOE RequestID={}

Одним из преимуществ параллельного выполнения этого является то, что если файл FILEB.gz слишком велик для размещения в памяти, то при этом будет выполняться поиск в параллельном режиме, что исключает чтение файла FILEB.gz для каждого поиска. Еще одним преимуществом является то, что вы можете использовать несколько процессорных ядер, которые на вашем компьютере практически гарантированы.

Вы можете установить GNU Parallel просто:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

Посмотрите вступительные видео для GNU Parallel, чтобы узнать больше: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Другие вопросы по тегам