Строка 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