Экспорт результатов sqoop eval в вывод через запятую - PullRequest
0 голосов
/ 28 июня 2019

Я запускаю sqoop eval-код, который выводит данные в формате с разделением каналов.Я хотел бы иметь его в формате запятой и удалить дополнительное форматирование, чтобы я мог сохранить его в переменной и использовать в другом месте.

Ниже приведен код:

sqoop eval -Dmapreduce.job.queuename=comres $PASS_STRING --connect 'jdbc:sqlserver://XXXX:1433;DatabaseName=XXXX' --query "select column_name from information_schema.columns where table_name='MOT_BAJA' AND TABLE_CATALOG='EEEE'"

Вот что сейчас показывает:

------------------------
| column_name          |
------------------------
| TB_CODIGO            |
| TB_ELEMENT           |
| TB_INGLES            |
| TB_IMSS              |
| TB_NUMERO            |
| TB_TEXTO             |
| LLAVE                |
------------------------    

Я хочу вот так:

TB_CODIGO,TB_ELEMENT,TB_INGLES,TB_IMSS,TB_NUMERO,TB_TEXTO,LLAVE    

1 Ответ

0 голосов
/ 28 июня 2019

Вы можете использовать awk:

your_command | awk 'NR > 3 && NF==3 {printf "%s%s", (printed ? "," : ""), $2; printed++}'

Объяснение:

NR > 3 && NF == 3: если число строк (NR), которое мы сейчас обрабатываем, больше 3, а числополей (NF) для этой строки равно 3, затем продолжите и обработайте строку, используя код в { ... }.

printed: мы сохраняем в этой переменной количество полей, которые мы напечатали на сегодняшний день.

(printed ? "," : ""): если вы напечатали хотя бы одно поле, то это означает ",".В противном случае он оценивается как пустая строка "".

printf "%s%s", (printed ? "," : ""), $2:, выведите ",", если мы уже печатали поле раньше.Затем выведите второе слово текущей строки.

...