В целом, foo < bar
и < bar foo
эквивалентны в сценариях bash. Каждый раз, когда < filename
обрабатывается оболочкой, это означает, что команда, с которой он связан, будет получать стандартный ввод из этого файла. Никаких дополнительных команд или процессов здесь не задействовано; оболочка делает это сама.
Запуск cat filename
считывает содержимое указанного файла и записывает его в стандартный вывод. |
между двумя командами означает подключение стандартного вывода левой команды к стандартному вводу правой команды.
Таким образом, обе ваши команды имеют одинаковый эффект отправки содержимого /proc/uptime
в awk, но первый способ запускает для этого дополнительный cat
процесс.
Ваш пример и/или попытка неверны.
В любом случае, если я возьму файл примера, ваш сценарий, вероятно, может быть
while read -r line; do
sed -n "/CREATE TABLE <SCHEMA_NAME>.$line/,/;/p" CREATE_DDLs.txt ;
done < List_File.txt
и он будет соответствовать всем записям, потому что ACASE
также будет соответствовать ACASE01
. Используйте $
в качестве привязки для окончания строки :
while read -r line; do
sed -n "/CREATE TABLE <SCHEMA_NAME>.$line$/,/;/p" CREATE_DDLs.txt ;
done < List_File.txt
Тем не менее, для более длинного списка таблиц не очень эффективно сканировать весь файл снова и снова, в то время как с помощью расширенных регулярных выражений вы можете искать что-то вроде (ACASE|ABC|ABCH)
, так что поместите этот первый файл в правильную форму и использовать его в шаблоне поиска:
TABLES=$(cat List_File.txt|tr '\n' '|')
sed -nE "/CREATE TABLE <SCHEMA_NAME>.(${TABLES%|})$/,/;/p" CREATE_DDLs.txt
tr
заменит все новые строки чертами ИЛИ, а %|
в расширении переменной удалит завершающую черту.
Вы можете сделать что-то подобное, используя *режим абзаца" в GNU awk:
gawk '
NR==FNR{tbl["CREATE TABLE <SCHEMA_NAME>." $1]; next} ($1 in tbl){ORS=RT; print}
' List_File.txt RS= FS='\n' CREATE_DDLS.txt
CREATE TABLE <SCHEMA_NAME>.ACASE
(
COLUMN1,
COLUMN2,
COLUMN3
) ;
CREATE TABLE <SCHEMA_NAME>.ABC
(
COLUMN1,
COLUMN2,
COLUMN3
) ;
Вы можете сделать то же самое в любом awk, за исключением того, что у вас не будет доступа к RT
, поэтому вам нужно будет установить ORS
на что-то фиксированное, например\n\n