Imprimindo em uma linha o texto comum usando comm cmd?

0

Eu tenho 2 arquivos que contêm numbers_ID, status, descrpation Eu quero juntar os dois arquivos com base nos números como

number_123, status1, status2 

Meu arquivo 1:

number_123,this car is under maintenance  
number_345,this car checked is done
number_356,this car is under main 

Meu arquivo 2:

number_123,hold  
number_345,done 

Eu preciso unir apenas o número existente nos dois arquivos como:

number_123,hold,this car is under maintenance    
number_345,done,this car checked is done 

Eu usei comm file1 file2 para encontrar os números comuns, mas o arquivo se parece com:

number_123,this car is under maintenance 
number_123,hold 
number_345,this car checked is done
number_345,done

Como posso imprimi-lo em uma linha como

 number_123,hold,this car is under maintenance    
 number_345,done,this car checked is done 
    
por Lona gracia 02.08.2018 / 17:25

1 resposta

1

O utilitário comm é usado para comparar linhas inteiras entre arquivos. O que você quer fazer é participar de um campo específico.

$ join -t, file2 file1
number_123,hold,this car is under maintenance
number_345,done,this car checked is done

Isso pressupõe que os dois arquivos sejam classificados no campo de junção (a primeira coluna delimitada por vírgulas em cada arquivo).

Se os arquivos não estiverem classificados, você poderá classificá-los previamente usando

sort -t, -k1,1 -o file1 file1
sort -t, -k1,1 -o file2 file2

Em ksh93 , bash ou zsh , você também pode fazer o tipo "on the fly":

join -t, <( sort -t, -k1,1 file2 ) <( sort -t, -k1,1 file1 )
    
por 02.08.2018 / 18:56

Tags