Заменить общие значения в двух файлах в соответствии с первым столбцом

Заменить общие значения в двух файлах в соответствии с первым столбцом

Как заменить общие значения в двух файлах по первому столбцу?

У меня есть файл 1 (1.txt):

CH063_01084
CH063_01083
CH063_13925
CH063_14473

и файл 2 (2.txt):

CH063_01083         FGSG_16349  4
CH063_14473         FGSG_16350  5

Выходной файл должен быть:

CH063_01084
CH063_01083          FGSG_16349 4
CH063_13925
CH063_14473          FGSG_16350 5

решение1

Вы можете использоватьjoinдля этого:

join -a 1 file1 file2

joinобъединяет файлы на основе общего поля. По умолчанию это первое поле обоих файлов. -a 1означает включить строки из первого файла, когда пары не было. Чтобы выбрать поля, отличные от первого, используйте -1 N -2 Mto pick field N from file1и M from file2.

решение2

Вы можете использовать join:

$ join -a 1 file1.txt file2.txt 
A
B asas 4
C
D addd 5

Если ваш файл не отсортирован:

join -a 1 <(sort 1.txt) <(sort 2.txt)

Но это заставляет вас потерять ваш формат. Вы можете использовать perl:

$ perl -anle ' $h{$F[0]} = $_;
    END { print for sort values %h }
' file1.txt file2.txt

Связанный контент