Сравните два файла и значения соответствия печати без игнорирования дубликатов

Я пытаюсь сравнить два файла и получить соответствующие значения. Я пробовал эту команду:

grep -Fwf file_1.txt file_2.txt > matched_output.txt 

Однако этот скрипт извлекает только уникальные значения .

File_1.txt

  K00012 
K00012
K00024
K00024
K00024
K00027
K00027
K00027
K00027

File_2.txt

  ko: K00012 UGDH;  UDP-глюкоза-6-дегидрогеназа 
ko: K00024 mdh; малатдегидрогеназа
ko: K00027 ME2; малатдегидрогеназа (оксалоацетат-декарбоксилирование)

Ожидаемый результат

  K00012 ko: K00012 UGDH;  UDP-глюкоза-6-дегидрогеназа 
K00012 ko: K00012 UGDH; UDP-глюкоза-6-дегидрогеназа
K00024 ko: K00024 mdh; малатдегидрогеназа
K00024 ko: K00024 mdh; малатдегидрогеназа
K00024 ko: K00024 mdh; малатдегидрогеназа
K00027 ko: K00027 ME2; малатдегидрогеназа (оксалоацетат-декарбоксилирование)
K00027 ko: K00027 ME2; малатдегидрогеназа (оксалоацетат-декарбоксилирование)
K00027 ko: K00027 ME2; малатдегидрогеназа (оксалоацетат-декарбоксилирование)
K00027 ko: K00027 ME2; малатдегидрогеназа (оксалоацетат-декарбоксилирование)

  • извлекать данные из текстовых файлов в csv
  • Объединение многострочной в одну строку с правильным форматом
  • Как удалить идентичные строки из двух текстовых файлов?
  • Укажите, сколько раз каждая строка появляется в файле
  • Поиск шаблона и добавление строки в другой файл
  • Стирание двухстрочного шаблона с sed / grep / whatever
  • Найти первое появление числа в каждой строке файла
  • Поиск и замена текста в нескольких файлах
  • 2 Solutions collect form web for “Сравните два файла и значения соответствия печати без игнорирования дубликатов”

    Поскольку те K?????? значения уникальны во втором файле, который вы могли бы использовать awk , сначала прочитав второй файл и сохраняя каждую строку в массив по индексу K?????? затем обрабатывать 1-й файл и для каждого K?????? то есть в массиве напечатать значение и соответствующую строку:

     awk 'NR==FNR{split($1, a, ":"); u=a[2];b[u]=$0; next} {if ($0 in b) {print $0, b[$0]}}' File2_.txt File1_.txt 

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

     sed 's|.*:\([^[:blank:]]*\)[[:blank:]].*|/\1/c\\\ \1 &|' File2_.txt | sed -f - File1_.txt 

    Это предполагает, что есть только один : (после ko ) и никакой обратной косой черты во втором файле и что K?????? не может содержать слэши.

     while read line do grep -q "$line" File_2.txt if [ "$?" -eq "0" ]; then echo -n "$line " grep "$line" File_2.txt fi done < File_1.txt 

    Не стесняйтесь настраивать этот скрипт, чтобы дать гораздо более оптимальный результат

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