comm cmdを使用してプレーンテキストを1行で印刷しますか?

comm cmdを使用してプレーンテキストを1行で印刷しますか?

数値_ID、状態、説明を含むファイルが2つあります。数字に基づいてこれら2つのファイルを結合したいと思います。

number_123, status1, status2 

私のファイル1:

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

私のファイル2:

number_123,hold  
number_345,done 

両方のファイルの既存の数字を次のように連結します。

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

共通番号を見つけるためにcomm file1 file2を使用しましたが、ファイルは次のようになります。

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

1行で印刷するにはどうすればよいですか?

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

答え1

このcommユーティリティは、ファイル間の行全体を比較するために使用されます。あなたが望むのは、特定の分野に参加することだけです。

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

これは、両方のファイルが結合フィールド(各ファイルで最初にカンマで区切られた列)に基づいてソートされていると仮定します。

ファイルがソートされていない場合は、次のように事前ソートできます。

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

ksh93、または「すぐに」並べ替えることもできますbashzsh

join -t, <( sort -t, -k1,1 file2 ) <( sort -t, -k1,1 file1 )

関連情報