在shell中将2个文件连接到1

use*_*817 0 unix linux shell join file

如何在shell中加入2个文件,例如:

file1 -

server1          monthly      25
server2          monthly      24
server3          daily        21
server4          weekly       7
server5          weekly       7                                         
Run Code Online (Sandbox Code Playgroud)

file2 -

server1          monthly      5
server2          monthly      4
server3          daily        1
server4          weekly       2
Run Code Online (Sandbox Code Playgroud)

你能帮助我得到像这样的输出:

server1          monthly      25     5
server2          monthly      24     4
server3          daily        21     1
server4          weekly       7      2
server5          weekly       7      0
Run Code Online (Sandbox Code Playgroud)

Chr*_*our 6

这是一份工作join:

$ join -a 1 -a 2 -e 0 -o '1.1 1.2 1.3 2.3' file1 file2
server1 monthly 25 5
server2 monthly 24 4
server3 daily 21 1
server4 weekly 7 2
server5 weekly 7 0
Run Code Online (Sandbox Code Playgroud)

管道到column -t一个格式很好的表:

$ join -a 1 -a 2 -e 0 -o '1.1 1.2 1.3 2.3' file file2 | column -t 
server1  monthly  25  5
server2  monthly  24  4
server3  daily    21  1
server4  weekly   7   2
server5  weekly   7   0
Run Code Online (Sandbox Code Playgroud)

使用重定向运算符将其存储到新文件:

$ join -a 1 -a 2 -e 0 -o '1.1 1.2 1.3 2.3' file file2 | column -t > newfile
Run Code Online (Sandbox Code Playgroud)

说明:

-a            print unpairable lines from file FILENUM, where FILENUM is
              1 or 2, corresponding to FILE1 or FILE2

-e EMPTY      replace missing input fields with EMPTY

-o FORMAT     obey FORMAT while constructing output line
Run Code Online (Sandbox Code Playgroud)

-a用于显示行,例如server 5..file1没有找到这样的行的地方file2 -e 0替换任何空字段,0-o用于格式化输出的1.1方式file1 field 11.3方法等file1 field 3.

注意:join确实要求首先对文件进行排序(在这种情况下它们已经排序),因此通常与使用该sort命令相结合.