pol*_*lym 2 sed awk text-processing
假设我有一个包含以下行的文件:
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
Run Code Online (Sandbox Code Playgroud)
我想替换所有包含calc
(仅出现在4th
列中)的列条目以包含3nd
和2nd
列之间的差异,因此4th=3rd-2nd
.
我怎么能这样做?
Sed 不会算术¹。请改用 awk。
awk '
$4 == "calc" {sub(/calc( |\t)/, sprintf("%-6.2f", $3 - $2))}
1'
Run Code Online (Sandbox Code Playgroud)
所述1
在端装置进行打印的一切(任一前述变换之后的)。sub
您可以将文本替换为,而不是$4
,但这样做会用单个空格字符替换列间空格(可以是任何空格和制表符序列)。如果您的列以制表符分隔,则可以使用
awk '
BEGIN {ORS = "\t"}
$4 == "calc" {$4 = sprintf("%.2f", $3 - $2))}
1'
Run Code Online (Sandbox Code Playgroud)
¹是的,是的,技术上可以,因为它是图灵完备的。但不是以任何理智的方式。