Text-Processing

如何根據文件內的 Number/Counter 排序和加入?

  • March 27, 2017

我想根據文件中的編號加入兩個文件,兩個編號相同的文件

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

和第二個文件

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

我想根據編號加入兩個文件,像這樣,將每個型號相互連接在一個文件中。

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

使用join.

看起來將文件中的第一個空格字元更改為空格以外的字元就足以轉換文件以空格分隔的記錄。

這是一個將第一個空格替換為%然後加入每個文件的第二列的實現。

$ 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 ' 

引用自:https://unix.stackexchange.com/questions/351225