Вступление
Утилиты Bash упрощают так много задач, но не все задачи имеют прямую команду или оператор. Очень распространенная и обычная задача во многих сценариях сценариев - объединение строковых переменных.
Bash не имеет встроенной функции или утилиты командной строки для объединения двух строк вместе. Однако есть много способов добиться этого.
Объединение строк в Bash
Ниже приведены шаги, с помощью которых можно объединить строки, упорядоченные по уровню сложности:
echoобе переменные- Форматирование с помощью
printf - Форматирование с использованием
awk - Concat строковые файлы с использованием
join
На протяжении всей статьи мы будем использовать переменные string1 и
string2 которые вы можете создать в своей оболочке, введя:
$ string1="Stuck"
$ string2="Together"
Объединение строк в Bash с помощью echo
Возможно, самый простой из всех уловок - просто повторить обе переменные, отформатированные рядом друг с другом:
$ echo "${string1}" "${string2}"
Обратите внимание, что у нас есть пробел между обеими строками. Фрагмент также можно записать как:
$ echo "${string1} ${string2}"
Оба фрагмента дадут одинаковый результат:
Stuck Together
Объединение строк в Bash с помощью printf
Давайте попробуем объединить строки, распечатав форматированный вывод на
телетайпе, то есть на терминале . Рассмотрим следующий фрагмент, где
два тега формата строки ( %s ) разделены пустым пространством, которое
можно заменить двумя переменными - $string1 и $string2 :
$ printf "%s %s\n" "$string1" "$string2"
Два тега формата при замене на наши строковые переменные вывода:
Stuck Together
Форматирование строк может показаться знакомым, если вы знакомы с
языками программирования. Если вам это кажется ошеломляющим, полезно
узнать, что делают разные теги (например, %s и %d ), что может
оказаться весьма кстати.
Объединение строк в Bash с помощью awk
Немного менее известная команда - команда awk вызывает AWK - язык
сценариев, специально разработанный для управления текстом и извлечения
из него строк. Неудивительно, что язык сценариев, предназначенный для
управления строками, также может объединять их:
$ echo "$string1" "$string2" | awk '{printf "%s~%s\n",$1,$2}'
Разберем команду выше. У нас есть два фрагмента, связанных друг с другом
(отсюда и оператор цепочки | Мы отправляем обе переменные string1 и
string2 качестве входных данных для команды awk .
Синтаксис команды
awk:awk '{some_operation}'.
В нашем случае мы выполняем внутри себя операцию printf Мы называем
переменные $1 и $2 ; они относятся к переменным, переданным в
качестве аргументов от echo .
Чтобы показать вариант здесь, мы используем тильду ( ~ ), разделяющую
теги формата. Таким образом, он дает следующий результат:
Stuck~Together
Объединение строк в Bash с помощью соединения
Теперь, когда планки подняты, давайте попробуем последний метод. Давайте
попробуем сохранить наши строки в двух отдельных файлах, по одному
столбцу в каждом. Файл string1.txt содержит слово "Stuck" написанное
два раза в три строки. Как и раньше, string2.txt будет содержать слово
"Together" написанное два раза в три строки, и следующие команды
создают файлы для нас:
$ echo "1 Stuck" > "string1.txt"
$ echo "2 Stuck" >> "string1.txt"
$ echo "1 Together" > "string2.txt"
$ echo "2 Together" >> "string2.txt"
Оба файла можно объединить с помощью следующей команды:
$ join string1.txt string2.txt
Чтобы команда соединения работала, оба файла должны иметь соответствующий столбец. В нашем случае у нас есть соответствующий столбец индекса, и мы получаем объединенный вывод, как показано ниже:
1 Stuck Together
2 Stuck Together
Заключение
Существует несколько способов объединения строк в сценариях bash. Выбор метода зависит от уровня сложности и характера проблемы. Какой вы выберете?