Создание текстового файла из других текстовых файлов

У меня есть текстовый файл, подобный этому

word_1 root_of_word_A word_2 root_of_word_B word_3 root_of_word_C word_4 root_of_word_A 

И другой документ, подобный этому

 root_of_word_A root_of_word_1 root_of_word_B root_of_word_2 root_of_word_C root_of_word_3 

Я должен заменить в первом документе другими словами второго документа, как это

 word_1 root_of_word_1 word_2 root_of_word_2 word_3 root_of_word_3 word_4 root_of_word_1 

Я думал, что могу сделать что-то подобное с awk. Я попробовал это:

 awk 'NR==FNR {print $1}{c[$2]++;next};c[$1]>0{print $2}' file1 file2 

Проблема в том, что я не знаю, как напечатать первый столбец файла1 и второй файл2.

Упомяните, что первый файл и второй имеют разное количество строк и что есть только пример, чтобы сделать его более ясным, что я хочу сделать (проблема заключается не в том, чтобы преобразовать A в 1, это в целом root_of_the_word).

  • Перенаправление активного порта
  • Помогите понять команду cut в скрипте
  • Как добавить дату ко всем файлам в каталоге, не касаясь подкаталогов через скрипт bash
  • Установка переменной, значение которой зависит от другой переменной
  • Редактирование INI-подобных файлов со сценарием
  • Поиск и замена имени пути в Linux с помощью sed
  • «ошибка каталога» при попытке передать имя каталога в функцию
  • Восстановление опции в конце функции в zsh
  • 2 Solutions collect form web for “Создание текстового файла из других текстовых файлов”

    Если слова в file2 уникальны, вы можете отменить порядок файлов, построить массив из file2 и применить его к file1 :

     $ awk 'NR==FNR{a[$1]=$2;next}{print $1,a[$2]}' file2 file1 word_1 root_of_word_1 word_2 root_of_word_2 word_3 root_of_word_3 word_4 root_of_word_1 

    Вы выполняете операцию реляционного соединения. Для этого есть стандартная команда Unix: join . Я хочу, чтобы больше людей знали об этом замечательном инструменте!

    Команда join объединяет два файла в общем поле. Однако два файла должны быть отсортированы в этом поле.

    Общее поле – это поле 2 первого файла ( file1.txt ) и поле 1 второго файла ( file2.txt ). Сортировка файлов в этих полях:

     $ sort -k2,2 -o file1.txt file1.txt $ sort -k1,1 -o file2.txt file2.txt 

    Затем выполните соединение в этих полях (прочитайте руководство для join ), указав, что мы хотим, чтобы в первом поле было поле 1 из первого файла и поле 2 из второго файла, и отсортировать результат (если необходимо):

     $ join -1 2 -2 1 -o 1.1,2.2 file1.txt file2.txt | sort word_1 root_of_word_1 word_2 root_of_word_2 word_3 root_of_word_3 word_4 root_of_word_1 
    Interesting Posts

    Управление подсветкой manjaro linux

    Разделите элементы столбца на столбец с одним элементом

    Почему «xrandr» говорит, что у меня есть 3 порта HDMI и 3 DP, в то время как у меня есть только один HDMI и один DP?

    Объединение нескольких строк в один, используя awk

    Команда Bash запускает команду каждый раз, когда отображается новое приглашение

    Исходное синтаксическое объяснение переменных в bashrc

    Какова связь между SLED и OpenSUSE?

    Ярлык для tabn & tabp в vim / vi

    Как я могу вернуть конкретный код ошибки в этот момент в моем TCL-скрипте?

    Сбой в Systemd. Где = установка не соответствует названию устройства

    Как установить tar-файл (jhead) на компьютере Mac или Linux

    разрешение разрешения автоопределения xrandr clone

    Xorg: два разных файла libglx.so с двумя разными serverlayouts

    Как я могу определить, какой диапазон адресов памяти RAM используется uboot?

    Как я могу запустить ssh-add автоматически, без подсказки пароля?

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