假设我有一个包含以下几行的文件:
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