ファイルをフィルタリングし、特定の文字列を含む行の値を掛け、すべての行を返します。

ファイルをフィルタリングし、特定の文字列を含む行の値を掛け、すべての行を返します。

grepを使用してファイルをフィルタリングし、フィルタリングされた行の特定の列に対して数学演算を実行し、最初のgrepフィルタのすべての行と数学演算が完了した行を返します( "value ="文字列を含む行のみを返します) )。

例:

grepを使用して文字列 "update"を含む行をフィルタリングするのは簡単です。わかりました。

出力:

...
列1列2修正する  4列5列
列1列2修正する  値 = 320
列1列2修正する  4列5列
列1列2修正する  値 = 210
...

これで、文字列 "value=" を含む行を選択し、次の列に 25 を掛けます。ただし、文字列 "value=" が含まれていない行が表示されます。

出力:

...
col1 col2 更新 col4 col5
col1 col2 アップデート  値 = 8000
col1 col2 更新 col4 col5
col1 col2 アップデート  値 = 5250
...

私はifステートメントとawkを使ってみましたが、数学が完了した行だけが返されます。

答え1

awk数学演算を実行するには、sed以上を使用する必要があります(sedとgrepは数学演算を実行できません)。

awkでgrepを変更することは、正規表現を使用するのと同じくらい簡単です/update/

awk '/update/ { if ($4=="value=") { $5*=25 }; print }' ./file

答え2

わかります:

awk '$4=="value=" {$5=($5*25)}1' foo

関連情報