当前位置: 技术问答>linux和unix
join关联文件的问题
来源: 互联网 发布时间:2016-03-14
本文导语: 文件1: Student 20380346 20381111 20382430 20382532 20382468 20384753 20389367 20389663 20389744 20389752 20389766 文件2: Mark1 20380346 9 20381111 8 20384753 6 20389367 5 20389663 7 20389744 7 20389752 9 20389766 2 文件3: Mark2 20381111 9 20382430 1 20382468 9 ...
文件1: Student
20380346
20381111
20382430
20382532
20382468
20384753
20389367
20389663
20389744
20389752
20389766
文件2: Mark1
20380346 9
20381111 8
20384753 6
20389367 5
20389663 7
20389744 7
20389752 9
20389766 2
文件3: Mark2
20381111 9
20382430 1
20382468 9
20384753 4
20389367 5
20389663 8
20389752 7
文件4: Mark3
20380346 9
20381111 9
20382430 9
20382468 9
20389367 5
20389663 8
20389744 3
这四个文件join出来的结果应该是
20380346 9 9
20381111 8 9 9
20382430 1 9
20382532
20382468 9 9
20384753 6 4
20389367 5 5 5
20389663 7 8 8
20389744 7 3
20389752 9 7
20389766 2
而我得出的结果怎么是
20380346 9 9
20381111 8 9 9
20382430 1 9
20382532
20382468
20384753 6 4
20389367 5 5 5
20389663 7 8 8
20389744 7 3
20389752 9 7
20389766 2
我用的命令是:
join -a1 Student Mark1 > tmp1
join -a1 Student Mark2 > tmp2
join -a1 Student Mark3 > tmp3
join tmp1 tmp2 | join - tmp3
20380346
20381111
20382430
20382532
20382468
20384753
20389367
20389663
20389744
20389752
20389766
文件2: Mark1
20380346 9
20381111 8
20384753 6
20389367 5
20389663 7
20389744 7
20389752 9
20389766 2
文件3: Mark2
20381111 9
20382430 1
20382468 9
20384753 4
20389367 5
20389663 8
20389752 7
文件4: Mark3
20380346 9
20381111 9
20382430 9
20382468 9
20389367 5
20389663 8
20389744 3
这四个文件join出来的结果应该是
20380346 9 9
20381111 8 9 9
20382430 1 9
20382532
20382468 9 9
20384753 6 4
20389367 5 5 5
20389663 7 8 8
20389744 7 3
20389752 9 7
20389766 2
而我得出的结果怎么是
20380346 9 9
20381111 8 9 9
20382430 1 9
20382532
20382468
20384753 6 4
20389367 5 5 5
20389663 7 8 8
20389744 7 3
20389752 9 7
20389766 2
我用的命令是:
join -a1 Student Mark1 > tmp1
join -a1 Student Mark2 > tmp2
join -a1 Student Mark3 > tmp3
join tmp1 tmp2 | join - tmp3
|
你应该先对所有的文件先用sort排好序,在join
你的这4个文件分别对应test1.txt test2.txt test3.txt, test4.txt
[root@shwhg adf]# sort test1.txt >test5.txt
[root@shwhg adf]# sort test2.txt >test6.txt
[root@shwhg adf]# sort test3.txt >test7.txt
[root@shwhg adf]# sort test4.txt >test8.txt
[root@shwhg adf]# ls
test1.txt test2.sh test2.txt test3.txt test4.txt test5.txt test6.txt test7.txt test8.txt
[root@shwhg adf]# join -a1 test5.txt test6.txt
20380346 9
20381111 8
20382430
20382468
20382532
20384753 6
20389367 5
20389663 7
20389744 7
20389752 9
20389766 2
[root@shwhg adf]# join -a1 test5.txt test6.txt|join -a1 - test7.txt
20380346 9
20381111 8 9
20382430 1
20382468 9
20382532
20384753 6 4
20389367 5 5
20389663 7 8
20389744 7
20389752 9 7
20389766 2
[root@shwhg adf]# join -a1 test5.txt test6.txt|join -a1 - test7.txt|join -a1 - test8.txt
20380346 9 9
20381111 8 9 9
20382430 1 9
20382468 9 9
20382532
20384753 6 4
20389367 5 5 5
20389663 7 8 8
20389744 7 3
20389752 9 7
20389766 2
[root@shwhg adf]# ls
test1.txt test2.sh test2.txt test3.txt test4.txt test5.txt test6.txt test7.txt test8.txt
你的这4个文件分别对应test1.txt test2.txt test3.txt, test4.txt
[root@shwhg adf]# sort test1.txt >test5.txt
[root@shwhg adf]# sort test2.txt >test6.txt
[root@shwhg adf]# sort test3.txt >test7.txt
[root@shwhg adf]# sort test4.txt >test8.txt
[root@shwhg adf]# ls
test1.txt test2.sh test2.txt test3.txt test4.txt test5.txt test6.txt test7.txt test8.txt
[root@shwhg adf]# join -a1 test5.txt test6.txt
20380346 9
20381111 8
20382430
20382468
20382532
20384753 6
20389367 5
20389663 7
20389744 7
20389752 9
20389766 2
[root@shwhg adf]# join -a1 test5.txt test6.txt|join -a1 - test7.txt
20380346 9
20381111 8 9
20382430 1
20382468 9
20382532
20384753 6 4
20389367 5 5
20389663 7 8
20389744 7
20389752 9 7
20389766 2
[root@shwhg adf]# join -a1 test5.txt test6.txt|join -a1 - test7.txt|join -a1 - test8.txt
20380346 9 9
20381111 8 9 9
20382430 1 9
20382468 9 9
20382532
20384753 6 4
20389367 5 5 5
20389663 7 8 8
20389744 7 3
20389752 9 7
20389766 2
[root@shwhg adf]# ls
test1.txt test2.sh test2.txt test3.txt test4.txt test5.txt test6.txt test7.txt test8.txt