Заменить строку с шаблоном, сохраняя строку нетронутой - PullRequest
0 голосов
/ 14 мая 2018

Заменяет строку на sed или awk, где она идентифицирует скороговорку, как указано ниже :

Пример : он ищет слово, начинающееся с "XX" и заканчивающееся на "XX", и заменяет слово на конкатенирующий на "$ {hf:" в начале "XX" и "}" в конце "ХХ" ВХОД

CREATE TABLE XX_DB_XX.test_XX_YYYYMMDD_XX
AS
SELECT id
FROM XX_R_DB_XX.usr_XX_YYYYMMDD_XX
WHERE year              = XX_YYYY_XX
   AND month       = XX_MM_XX
   AND day         = XX_DD_XX;

OUTPUT

CREATE TABLE ${hf:XX_DB_XX}.test_${hf:XX_YYYYMMDD_XX}
AS
SELECT id
FROM ${hf:XX_R_DB_XX}.usr_${hf:XX_YYYYMMDD_XX}
WHERE year              = ${hf:XX_YYYY_XX}
   AND month       = ${hf:XX_MM_XX}
   AND day         = ${hf:XX_DD_XX};

Пытался заменить сопоставление с образцом, но проблема в том, что в выводе я хочу заменить $ A на строку «XX _ (*) ​​_ XX», доступную поверх входного файла.

 cat test.hql | gawk '{ print gensub(/XX_+[A-Z,_]+_XX/, "${hiveconf:$A}", 1) 
}' |  gawk '{ print gensub(/XX_+[A-Z]+_XX/, "${hiveconf:$A}", 1) }'

ВЫХОД: -> То, что я получил, необходимо обновить с доступной строкой, так как это можно сделать:

CREATE TABLE ${hiveconf:$A}.test_${hiveconf:$A}
AS
SELECT id
FROM ${hiveconf:$A}.usr_${hiveconf:$A}
WHERE year              = ${hiveconf:$A}
AND month       = ${hiveconf:$A}
AND day         = ${hiveconf:$A};

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Вот для чего существует sed,

sed 's/XX[[:alnum:]_]*XX/${hf:&}/g' file

[[:alnum:]_] обозначает буквенно-цифровой или подчеркивание.Добавление * означает ноль или более раз в регулярном выражении.

0 голосов
/ 14 мая 2018

Или вы могли бы сделать

sed 's/\(XX[^'XX']*XX\)/${hf:\1}/g'

в случаях, когда между XX могут быть и не буквенно-цифровые символы.

Сначала сопоставляется XX, после чего ждет, пока не будет найден XX.

0 голосов
/ 14 мая 2018

После awk может помочь вам в том же.

awk '{gsub(/XX_[a-zA-Z]+_XX/,"${hf:&}")} 1'   Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...