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

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

word_1 root_of_word_A word_2 root_of_word_B word_3 root_of_word_C word_4 root_of_word_A 

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

  • Получить строки с максимальными значениями в столбце с помощью awk, uniq и sort
  • Как объединить строки и цифры
  • Поменять местами и группами по квадратным скобкам
  • Выполнение пользовательской функции в вызове find -exec
  • Содержит ли жесткие ссылки обычные файлы?
  • массив сценариев оболочки для элементов файлов
  •  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).

  • как создать скрипт для создания резервной копии gpg?
  • Работает в командной строке, но не в сценарии оболочки
  • Извлечение IP-адреса из текста и сохранение его в переменной
  • stat (FILENAME) в awk
  • сценарий оболочки для печати строк, если в столбце 2 есть значение
  • PCRE-regex Используйте grep для исключения группы захвата
  • 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 
    Linux и Unix - лучшая ОС в мире.