列項目を他の列項目の合計に置き換える

列項目を他の列項目の合計に置き換える

次の行を含むファイルがあるとしましょう。

02.03.14    14.50   14.50   0.00    Desc
02.03.14    17.00   0.00    17.00   Desc
01.03.14    2.82    1.68    calc    Desc
02.03.14    1.04    0.00    1.04    Desc
06.03.14    6.00    0.00    6.00    Desc
08.03.14    11.76   2.98    calc    Desc
10.03.14    3.27    0.00    3.27    Desc

calc含むすべての列項目(列のみ)を4th含む列と列の違いに置き換えたいと思います。3nd2nd4th=3rd-2nd

どうすればいいですか?

ベストアンサー1

Sedは算術演算を実行できません。代わりにawkを使用してください。

awk '
    $4 == "calc" {sub(/calc(  |\t)/, sprintf("%-6.2f", $3 - $2))}
    1'

最後は、1すべてを印刷することです(以前の変換後)。subテキスト置換を実行する代わりに割り当てることができますが、$4それを行うと、列間のスペースは単一のスペース文字(スペースとタブの順序である可能性があります)で置き換えられます。列がタブで区切られている場合は、次のものを使用できます。

awk '
    BEGIN {ORS = "\t"}
    $4 == "calc" {$4 = sprintf("%.2f", $3 - $2))}
    1'

はい、はい、チューリング完全なので技術的には可能です。しかし、正気ではありません。

おすすめ記事