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

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

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

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

  • Копировать текст, содержащийся только в кавычках "" из файла
  • Удалите символ новой строки только для всех N строк
  • Удалите N-ю строку из каждой строки, соответствующей шаблону
  • Удаление каждой строки, которая не является последовательностью из 7 чисел
  • удалить с начала файла до n-го вхождения шаблона
  • Как получить конкретное поле строки
  • 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; малатдегидрогеназа (оксалоацетат-декарбоксилирование)

  • Удалить несколько строк, не жадных
  • команда для извлечения данных между двумя строками
  • Выбирать и удалять строки, соответствующие шаблону из файла
  • Отображать только повторяющиеся строки, игнорируя первые пробелы x на строку
  • Удалите все слова перед определенным шаблоном, после другого шаблона
  • возвратные строки, содержащие числа в диапазоне в определенном столбце
  • 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 

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

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