2016-10-15 2 views
-1

3つのファイルの最初の列を比較したいと思います。もし一致すれば、出力をfile2の4列目とfil3の2列目の5列目に出力したいと思います。一致しない場合、0が出力の4番目と5番目の列に追加されます。1列に3列を結合する方法

file1.txt 
     123,apple,goodquality 
     456,orange,mediumquality 
     678,grape,lowquality 
    786,kiwi,goodquality 

file2.txt 
123,55 
678,2 

file3.txt 
456,10 

output.txt 
123,apple,goodquality,55,0 
456,orange,mediumquality,0,10 
678,grape,lowquality,2,0 

joinコマンドを使用していましたが、3つのファイルすべてでcolumn1の値が有効であればうまく動作します。

答えて

0

最初の2つのファイルを結合し、その出力を3番目のファイルに結合する必要があります。デフォルトのフィールド値として0を使用して、外部結合を行うためにjoinにいくつかの追加オプションが必要です。あなたのファイルと仮定すると、既に、その後、最初のフィールドによって辞書順を並べ替えられています:

join -t , -a 1 -a 2 -e 0 -o 0,1.2,2.1  file1.txt file2.txt | 
join -t , -a 1 -a 2 -e 0 -o 0,1.2,1.3,2.1 -   file3.txt 

出力

123,apple,123,0 
456,orange,0,456 
678,grape,678,0 
786,kiwi,0,0 

をそして、あなたは2ゼロの値を持つための最後の行を除外したい場合は、その後、

join -t, -a 1 -a 2 -e 0 -o 0,1.2,2.1  file1.txt file2.txt | 
join -t, -a 1 -a 2 -e 0 -o 0,1.2,1.3,2.1 -   file3.txt | 
sed '/,0,0$/d' 
+0

これらのパラメータをjoinコマンドで使用したことはありません。同じことを説明してください。または、探索するリンクを共有してください。ありがとう@glenn –

+0

マニュアルページ –

+0

から始めてください。しかし、出力3列目には届かない –

関連する問題