1つのファイルのパターンに一致する行を取得し、同じパターンに一致する2番目のファイルに入れます。

1つのファイルのパターンに一致する行を取得し、同じパターンに一致する2番目のファイルに入れます。

それぞれ「b」文字で始まる行を含む2つのファイルがあり、最初のファイルに表示される順序で行をマージしたいとします。

最初のファイル(1.txt)

b 12 32
b 23 43
b 23 63

2番目のファイル(2.txt)

a 1322
c 233
g 23324
s 24352

b
h vd2 3f4g

a 2t42
c 34536
g h3443e
s 24h455

b
h 3434gggdfbv4

a 423gwg
c f24bv
g 34g 45h
s 4zth5

b
h 3456zh543

2番目のファイルでは、「b」文字で始まる行には情報が含まれなくなりますが、最初のファイルでは私の行が「b」で始まり、その後に整数値が続くことがわかります。

今必要なのは、最初のファイルから整数を取得し、最初のファイルに表示されるように「b」行の2番目のファイルに入れることです。したがって、2番目のファイルは次のように表示する必要があります。

マージファイル(3.txt)

a 1322  
c 233  
g 23324  
s 24352  

b 12 32  
h vd2 3f4g  

a 2t42  
c 34536  
g h3443e  
s 24h455  

b 23 43  
h 3434gggdfbv4  

a 423gwg  
c f24bv  
g 34g 45h  
s 4zth5  

b 23 63  
h 3456zh543  

参加するこのコマンドは私が望むことをすることができるようですが、先行する "b"文字と一致する行でのみ機能するように指示する方法を見つけることができません。また、ファイル1を繰り返して「^ b」パターンに一致する行番号を取得し、それを使用して「^ b」パターンに一致するファイル2の行を置き換えることも検討しましたが、再び動作する解決策が見つかりませんでした。 。私のタスクを実行するための短いbashスクリプトを知っている人はいますか?

ベストアンサー1

GNU sedの使用:

sed -e '/^b/{R 1.txt' -e 'd}' 2.txt

2.txtファイルを「位置」で編集するには、sedオプションを追加してください-i

おすすめ記事