Моя цель — добавить префикс ко всем строкам и столбцам, возвращаемым из SQL-запроса (все строки одного столбца должны иметь один и тот же префикс). То, как я это делаю в данный момент,
echo "$(<my_sql_query> | awk '$0 = "prefixA_"$0' |
awk '$2 = "prefixB_"$2' |
awk '$3 = "prefixC_"$3' |
awk '$4 = "prefixD_"$4')"
Сценарий выше делает именно то, что я хочу, но я хотел бы знать, есть ли более быстрый способ сделать это.
Почему вы делаете это в bash, а не в самом SQL-запросе?
SELECT CONCAT('prefixA_', col1), CONCAT('prefixB_', col2), ...
Его не нужно заворачивать echo
. Просто mysql ... | awk ...
@Barmar К сожалению, это всего лишь небольшая часть гораздо большего конвейера преобразований, поэтому конкатенация строк в сценарии sql невозможна.
Пожалуйста, включите образец ввода и желаемый результат.
Если вы хотите сделать это с помощью решения echo
+ awk
, вы можете сделать это в одном awk
, где мы могли бы префиксировать значения за один раз, хотя я не уверен в вашем запросе, но учитывая, что здесь поля разделены только пробелом .
echo "$<my_sql-query>" |
awk '{$0 = "prefixA_"$0;$2 = "prefixB_"$2;$3 = "prefixC_"$3;$4 = "prefixD_"$4} 1'
Обновлено: Добавление здесь общего решения, с помощью которого мы могли бы передавать номера полей и их соответствующие значения, и их можно было бы добавлять в поля, справедливое предупреждение не проверяло его, потому что образцы не были предоставлены.
echo "$<my_sql-query>" |
awk '
function addPrefix(fieldNumbers,fieldValues){
num=split(fieldNumbers,arr1,"@")
split(fieldValues,arr2,"@")
for(i=1;i<=num;i++){
$arr1[i]=arr2[i]$arr1[i]
}
}
addPrefix("1@2@3@4","prefixA_@prefixB_@prefixC_@prefixD_")
1'
Вам не нужно вводить awk в себя несколько раз. Просто добавьте операторы в один вызов, разделенные ; например awk ''$0 = "prefixA_"$0';$2 = "prefixB_"$2....