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)
这是一份工作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 1和1.3方法等file1 field 3.
注意:join确实要求首先对文件进行排序(在这种情况下它们已经排序),因此通常与使用该sort命令相结合.