2014-10-27 3 views
0

Я хочу объединить два файла в Unix. Как я могу это сделать?Как объединить два файла в unix

например file1 содержит:

host1:90:/users:user1 
host2:90:/users:user1 
host3:90:/users:user1 
host4:90:/users:user1 
host5:90:/users:user1 
host6:90:/users:user1 
host7:90:/users:user1 

file2 содержит:

host1:owner_name 
host2:owner_name 
host3:owner_name 
host4:owner_name 
host5:owner_name 
host6:owner_name 
host7:owner_name 

выходной результат:

host1:90:/users:user1:owner_name 
host2:90:/users:user1:owner_name 
host3:90:/users:user1:owner_name 
host4:90:/users:user1:owner_name 
host5:90:/users:user1:owner_name 
host6:90:/users:user1:owner_name 
host7:90:/users:user1:owner_name 

я использовал эту команду paste -d ':' file1 file2 >merged_file, но это то, что я получаю:

host1:90:/users:user1:host1:owner_name 
host2:90:/users:user1:host2:owner_name 
host3:90:/users:user1:host3:owner_name 
host4:90:/users:user1:host4:owner_name 
host5:90:/users:user1:host5:owner_name 
host6:90:/users:user1:host6:owner_name 
host7:90:/users:user1:host7:owner_name 

ответ

2

Использование join вместо:

% join -t':' file1 file2 
host1:90:/users:user1:owner_name 
host2:90:/users:user1:owner_name 
host3:90:/users:user1:owner_name 
host4:90:/users:user1:owner_name 
host5:90:/users:user1:owner_name 
host6:90:/users:user1:owner_name 
host7:90:/users:user1:owner_name 
+0

'join' работает, но полагаю, что если file2 не в отсортированном порядке, то он дает ошибку. Можем ли мы использовать sed или awk – pratik

+0

@pratik Это можно устранить, отсортировав первое поле перед присоединением. Истинный вопрос: пытаетесь ли вы просто объединить файлы linewise или вы действительно пытаетесь объединить их вокруг первого столбца? – cnicutar

+0

Я также хочу объединить файл на основе первого столбца. – pratik