#! /bin/ksh
inputfile='file1.txt'
sqlfile='select.sql'
S_ids=$(awk -F"|" '{gsub(/^|$/,"\\'\''",$1) ; print $1","}' "$inputfile" |
xargs |
sed -e 's/,$//')
sed -i "s/FLAG/${S_ids}/g" "$sqlfile"
Вывод:
$ cat select.sql
SELECT *
FROM CUSTOMERS
WHERE ID IN ('1234', '1345', '8427', '2132', '3243');
Здесь используется функция awk
gsub ()
, чтобы добавить \ '
в начало и \',
в конце первого поля каждой строки. Он добавляет \ '
, а не просто '
, так что одинарные кавычки остаются в конвейере через xargs
.
Обратите внимание на использование '\' '
для встраивания одинарной кавычки в одинарные кавычки awk
скрипт - прочтите это как «end-single-quote, escaped-single -quote, start-single-quote-again ".
xargs
без команды для запуска по умолчанию xargs echo
, так что все выходные строки (первые поля file1.txt в одинарных кавычках) помещаются в одну строку, разделенную пробелами. Это будет работать, если в file1.txt
не будет много десятков тысяч строк - достаточно, чтобы превысить максимальную длину строки оболочки (обычно 128 КБ или больше).
Наконец, он направляет вывод xargs
в sed
, чтобы удалить окончательные ,
из строки.
Если вы предпочитаете, чтобы после каждого идентификатора в select.sql
были символы новой строки, измените последнюю строку скрипта на:
sed -i "s/FLAG/${S_ids}/g; s/, /\n/g" "$sqlfile"
Вывод будет:
SELECT *
FROM CUSTOMERS
WHERE ID IN ('1234',
'1345',
'8427',
'2132',
'3243');
Да, вам нужен раздел GPT в формате FAT32 с типом «Системный раздел EFI» (конкретный GUID может быть представлен по-разному в различных инструментах, например, флаг «загрузки» в разошлись
); см. также это введение .
PS: ваш вопрос был довольно трудным для чтения и понимания, вы в первую очередь поняли то, что хотели спросить? ..
На второй вопрос у меня нет ответа. Но я думаю, что вы должны набрать пароль три раза.