次の行を含むファイルがあるとしましょう。
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
含む列と列の違いに置き換えたいと思います。3nd
2nd
4th=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'
はい、はい、チューリング完全なので技術的には可能です。しかし、正気ではありません。
答え2
awk -F "\t" '$4 == "calc" {$4 = $3-$2}1' OFS='\t' file