Sed não pode fazer aritmética¹. Use awk em vez disso.
awk '
$4 == "calc" {sub(/calc( |\t)/, sprintf("%-6.2f", $3 - $2))}
1'
O 1
no final significa imprimir tudo (após qualquer transformação anterior). Em vez da substituição de texto com sub
, você poderia atribuir a $4
, mas isso substitui o espaço entre colunas (que pode ser qualquer sequência de espaços e guias) por um único caractere de espaço. Se suas colunas forem separadas por tabulações, você poderá usar
awk '
BEGIN {ORS = "\t"}
$4 == "calc" {$4 = sprintf("%.2f", $3 - $2))}
1'
¹ Sim, sim, tecnicamente pode, já que é Turing-complete. Mas não de qualquer maneira sensata.