ファイル内の数値/カウンタに基づいてソートしてリンクする方法は?

ファイル内の数値/カウンタに基づいてソートしてリンクする方法は?

ファイル内の番号に基づいて2つのファイル、つまり同じ番号の2つのファイルをリンクしたいと思います。

Toyota   model1 
BMW      model2
Benz     model3
BMW      model4 
BMW      model5
Benz     model6 
Benz     model7

そして2番目のファイル

class C    model1
class E    model2
class A    model3
class W    model4
class W    model5
class C    model6
class A    model7

このように、数字に基づいて2つのファイルをリンクし、各モデルを1つのファイルにリンクしたいと思います。

Toyota      class C  model1
BMW         class E  model2
Benz        class A  model3
BMW         class W  model4 
BMW         class W  model5  
Benz        Class C  model6
Benz        Class A  model7

後で「モデル」文字列を削除してください。

私のコード、

sort -V file1 > new_file1 
sort -V file2 > new_file2 
join newfile1 new_file2 > result.txt
sed 's/model[(1-9)]//g' result.txt > result_1.txt

問題ファイルの結合中にエラーが発生します。

join: file1.txt:10: is not sorted: 03Benz   model   249
join: file2.txt:4: is not sorted: BMW   model   2

それ以降に頻度を計算したい場合はどうすればよいですか?

   ( this pair happen in the text 2 times) after joined 
Toyota      class C  1
BMW         class E  1
Benz        class A  2
BMW         class W  2
Benz        Class C  1

ベストアンサー1

使用join

ファイルの最初のスペース文字をスペース以外の文字に変更すると、ファイルをスペースで区切られたレコードに変換するのに十分なようです。

%以下は、最初のスペースを各ファイルの2番目の列に置き換えてから連結する実装です。

$ cat file2 | sed -e 's/ /%/' | join -1 2 -2 2 - file1

または

$ <file2 sed -e 's/ /%/' | join -1 2 -2 2 - file1

生産する

model1 class%C Toyota
model2 class%E BMW
model3 class%A Benz
model4 class%W BMW
model5 class%W BMW
model6 class%C Benz
model7 class%A Benz

タブ区切り形式に変換する必要がある場合に使用できますtr

tr ' %' '\t ' 

おすすめ記事