根据第一列替换两个文件中的公共值

use*_*347 5 scripting text-processing columns

如何根据第一列替换两个文件中的公共值?

我有文件 1 (1.txt):

CH063_01084
CH063_01083
CH063_13925
CH063_14473
Run Code Online (Sandbox Code Playgroud)

和文件 2 (2.txt):

CH063_01083         FGSG_16349  4
CH063_14473         FGSG_16350  5
Run Code Online (Sandbox Code Playgroud)

输出文件应该是:

CH063_01084
CH063_01083          FGSG_16349 4
CH063_13925
CH063_14473          FGSG_16350 5
Run Code Online (Sandbox Code Playgroud)

Mic*_*mer 9

您可以join为此使用:

join -a 1 file1 file2
Run Code Online (Sandbox Code Playgroud)

join基于公共字段组合文件。默认情况下,这是两个文件的第一个字段。-a 1表示在没有对时包含第一个文件中的行。要选择第一个以外的字段,请使用-1 N -2 M选择字段 N fromfile1和 M from file2


cuo*_*glm 5

您可以使用join

$ join -a 1 file1.txt file2.txt 
A
B asas 4
C
D addd 5
Run Code Online (Sandbox Code Playgroud)

如果您的文件未排序:

join -a 1 <(sort 1.txt) <(sort 2.txt)
Run Code Online (Sandbox Code Playgroud)

但它会让你失去你的格式。您可以使用perl

$ perl -anle ' $h{$F[0]} = $_;
    END { print for sort values %h }
' file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)