grep - 異なる数値セットを同じ数値セットに置き換える

grep - 異なる数値セットを同じ数値セットに置き換える

私はgrepに最初に触れて、次のことをする方法を知りたいです。この形式の約1000行を含むファイルがあります。

assign ( resid 105 and name CB ) ( resid 105 and name CA ) 4.1 0.8 0.8

assign ( resid 44 and name CB ) ( resid 44 and name CA ) 4.4 0.9 0.9 

最後の数字を次のように変更したいと思います。

4.6 2.6 2.6 ! 

私ができる方法はありますか?各行の数字は異なります。すべての数字を一貫して作成し、各行の末尾に「!」を追加しようとしています。

よろしくお願いします!

答え1

grep一致を印刷し、ファイルのデータを印刷するために使用されます。データを交換するには、次のものが必要ですsed

sed 's|[0-9]\..*$|4.6 2.6 2.6 !|g' file

4.6 2.6 2.6 !これにより、数字が何であるかに関係なく、各行の末尾にあるすべての数字が置き換えられます。

ファイルをその場で編集するには:

sed -i 's|[0-9]\..*$|4.6 2.6 2.6 !|g' file

出力:

assign ( resid 105 and name CB ) ( resid 105 and name CA ) 4.6 2.6 2.6 !

assign ( resid 44 and name CB ) ( resid 44 and name CA ) 4.6 2.6 2.6 !

答え2

今回はawkテキスト処理のためのもう一つのソリューションです。

awk '{gsub(/([[:digit:]]\.[[:digit:]] ?){3}$/,"4.6 2.6 2.6 !")}1' file

.これは、(また)行末の三重「数字」「数字」(および可能であれば空白)パターンをユーザが指定した文字列に置き換える。

出力(再)

assign ( resid 105 and name CB ) ( resid 105 and name CA ) 4.6 2.6 2.6 !

assign ( resid 44 and name CB ) ( resid 44 and name CA ) 4.6 2.6 2.6 !

使用される構文は完全に移植可能ではありません。mawkたとえば、繰り返し計算の構成がわからないため、次のように使用する必要があります。{number}

awk '{gsub(/[0-9]\.[0-9] [0-9]\.[0-9] [0-9]\.[0-9]$/,"4.6 2.6 2.6 !")}1' file

そのような実装を使用する場合awk

関連情報