использование cat в скрипте bash очень медленное

У меня есть очень большие текстовые файлы (~ 50 000), над которыми мне нужно выполнить некоторую обработку текста. В основном запускайте несколько команд grep. Когда я запускаю его вручную, он возвращается в одно мгновение, но когда я делаю то же самое в скрипте bash - это занимает много времени. Что я делаю неправильно в нижеприведенном сценарии bash. Я передаю имена файлов в качестве аргументов командной строки скрипту

Пример входных данных:

BUSINESS^GFR^GNevil
PERSONAL^GUK^GSheila

Вывод, который должен появиться в файле - BUSINESS^GFR^GNevil

Через некоторое время он начинает распечатывать весь файл на терминале. Как мне подавить то же самое?

#!/bin/bash
cat $2 | grep BUSINESS 

person nikel    schedule 26.12.2014    source источник
comment
Зачем вообще нужно cat? Почему бы не просто grep напрямую?   -  person Daniel    schedule 26.12.2014
comment
Что такое $($(cat $2) также, чтобы найти файл, используйте не cat f | grep 'something', а grep 'something' f   -  person fredtantini    schedule 26.12.2014
comment
Я не думаю, что вам нужно cat здесь - просто укажите файл в вызове grep.   -  person Dason    schedule 26.12.2014
comment
Хорошо. но когда я могу использовать то же самое в командной строке, почему бы и не в скрипте - cat test | БИЗНЕС | grep '^GFR|^GDE'   -  person nikel    schedule 26.12.2014
comment
Помимо UUOC, это тоже неправильно. cat $2 | grep ... мог по крайней мере дать вам правильные результаты. $(cat $2) | grep BUSINESS совершенно неправильно. По сути, содержимое $2 будет запускаться как команда...   -  person anishsane    schedule 26.12.2014
comment
я передаю имена файлов в качестве аргумента строки cmd номер 2, так что я хотел   -  person nikel    schedule 26.12.2014
comment
^^ Нет, cat file | command отличается от $(cat file) | command. например Создайте файл, содержащий только одну строку: ls и проверьте вывод cat file | grep . против $(cat file) | grep ....   -  person anishsane    schedule 26.12.2014


Ответы (1)


НЕ используйте cat с программой, которая сама может читать файл.
Это замедляет работу, и вы теряете функциональность:

grep BUSINESS test | grep '^GFR|^GDE'

Или вы можете сделать так с awk

awk '/BUSINESS/ && /^GFR|^GDE/' test
person Jotne    schedule 26.12.2014
comment
также, как мне подавить вывод grep, я изменил его, как показано ниже: $(grep BUSINESS $2| grep -E $countries)››$Output_File - person nikel; 26.12.2014
comment
Вам нравится вывод в файл? Приведите пример данных в своем исходном сообщении и укажите, каким должен быть результат. - person Jotne; 26.12.2014