Вступление
Утилиты 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. Выбор метода зависит от уровня сложности и характера проблемы. Какой вы выберете?