2016-07-07 20 views
2

2つのファイルがあります。 最初ファイルはこのようなものです:bash:2つのファイルを比較して列を追加する

name_service1|||S_SUCCESS||1111111111 
name_service1|||S_SUCCESS||1111111112 
name_service1|||S_SUCCESS||1111111113 
name_service1|||S_SUCCESS||1111111114 
name_service1|||S_SUCCESS||1111111115 
name_service1|||S_SUCCESS||1111111116 
name_service1|||S_SUCCESS||1111111117 
name_service1|||S_SUCCESS||1111111118 

そしてファイルはこのようなものです:私はname_serviceはフィールドで二つのファイル間の比較を行う必要がある

name_service1,20160705,0900 
name_service2,20160705,0800 

、フィールドが同じ場合は、日付と時間を追加します。以下のようなもの:

name_service1|20160705|0900|S_SUCCESS||1111111111 
name_service1|20160705|0900|S_SUCCESS||1111111112 
name_service1|20160705|0900|S_SUCCESS||1111111113 
name_service1|20160705|0900|S_SUCCESS||1111111114 
name_service1|20160705|0900|S_SUCCESS||1111111115 
name_service1|20160705|0900|S_SUCCESS||1111111116 
name_service1|20160705|0900|S_SUCCESS||1111111117 
name_service1|20160705|0900|S_SUCCESS||1111111118 

最初のファイルが大きいので、while readラインを使用し、最初のファイルの行ごとにgrepを行うと、長い時間がかかります。 2番目のファイルは5行または6行しかありません。

別の方法がありますか?

よろしく

+0

あなたは '使用するFILE2を変換することができます仮定| 'fld seps、' man join'。がんばろう。 – shellter

答えて

3

bashjointr、およびsedを使用します。同じ

join -t '|' -j 1 -o 1.1,2.2,2.3,1.4,1.5,1.6,1.7 -a 1 file1 <(tr ',' '|' < file2) | \ 
sed 's/|$//' 

が、bashの ISMSなし:

tr ',' '|' < file2 | \ 
join -t '|' -j 1 -o 1.1,2.2,2.3,1.4,1.5,1.6,1.7 -a 1 file1 - | \ 
sed 's/|$//' 
関連する問題