Добавление другого суффикса в конец строки

У меня есть текстовый файл, который содержит следующее:

John Jack Jerry 

У меня есть другой текстовый файл:

 2017 2015 2018 

И я хочу сделать так:

 John2017 John2015 John2018 Jack2017 Jack2015 Jack2018 Jerry2017 Jerry2015 Jerry2018 

Как я могу это сделать?

3 Solutions collect form web for “Добавление другого суффикса в конец строки”

Предполагая, что файлы невелики, может быть целесообразно прочитать их в массивы (с bash или ksh93 ):

 names=( $( <names.txt ) ) years=( $( <years.txt ) ) 

Затем вы можете построить двойной цикл, который объединяет каждое имя с каждым годом:

 for n in "${names[@]}"; do for y in "${years[@]}"; do printf '%s%s\n' "$n" "$y" done done 

Если years.txt мал, но names.txt большой:

 years=( $( <years.txt ) ) while read n; do for y in "${years[@]}"; do printf '%s%s\n' "$n" "$y" done done <names.txt 

Результат:

 John2017 John2015 John2018 Jack2017 Jack2015 Jack2018 Jerry2017 Jerry2015 Jerry2018 

Обработка файлов в виде файлов с одним столбцом, без заголовков, CSV:

 $ csvsql -H --query "SELECT * FROM names CROSS JOIN years" names.txt years.txt | sed -e '1d' -e 's/,//' 

Это выполняет операцию реляционного перекрестного соединения по данным в двух таблицах, а затем продолжает csvsql первую строку вывода вместе со всеми запятыми ( csvsql создает правильно отформатированный CSV с линией заголовка и значениями, разделенными запятыми).

csvsql является частью csvkit .

Решение, которое @ Kusalananda предоставило, превосходит его. Я предоставил его, не задумываясь о том, что $(cat ...) делает с точки зрения использования памяти. Я оставлю его здесь для справки – он будет работать и не страшен, если файлы маленькие.

 #!/bin/bash for name in $(cat names); do for year in $(cat years); do echo "${name}${year}" done done 
 $ join -j2 -t : names year | tr -d : 
  • соединить не существующее поле и удалить разделители выходных полей.

Поле 2 пусто и равно для всего элемента в names и year поэтому join объединяет каждое имя с годами: он фактически вычисляет декартово произведение.

  • Открытие файлов с сервера Ubuntu поверх ssh с терминала Mac
  • Какие из следующих файлов являются истинными сиротскими (потерянными) файлами и могут быть безопасно удалены?
  • Могу ли я создать символическую ссылку, которая будет игнорировать подкаталоги?
  • Как удалить файл с помощью команды mv?
  • Undeleteable 33GiB файл на USB-Stick 4GiB. fsck говорит «clean», Ошибка: «Операция не разрешена»
  • Как Linux вычисляет общее количество блоков при запуске / bin / ls -l?
  • Удалять файлы определенного расширения, кроме одного в Linux
  • Добавление вывода команды в цикл for
  • ALT + F2 не работает в Linux Mint Mate
  • Как переименовать файлы без расширения
  • Греп в пару тысяч файлов
  • Interesting Posts

    can 'dd' можно использовать для клонирования на меньшем жестком диске, зная, что разделы будут нуждаться в редактировании?

    Почему мой ноутбук сильно нагревается при использовании DVD-диска Knoppix?

    Параметры отображения изображений на консоли

    Подстановка команды в псевдониме разрешена в профиле bash?

    Как влиять на цикл bash while с временной глобальной переменной?

    Как измерить общий дисковый ввод-вывод в час

    Когда начинается своп? Когда процесс выдает ошибку из памяти и убивается?

    Как перенести файл на основе выражения имени файла с помощью сценария оболочки?

    munin не показывает все порты Ethernet

    Начальные вопросы относительно «<», «<<» и чтения файлов

    Каковы переменные $ remote_fs и $ syslog в заголовке SysVinit LSB?

    Служба GDM3 не найдена

    После закрытия вкладки в терминале Gnome, как получить в ней историю команд?

    Прерывание цикла for-loop в bash, но только после завершения итерации?

    Спасение / usr / bin на Debian Wheezy?

    Linux и Unix - лучшая ОС в мире.