将一个值复制到选定的行

时间:2014-07-25 13:49:05

标签: linux awk

我有像

这样的文件
A 1  2
A 1
A 1
B 2  3
B 2
B 2  

我想将所有A中的2复制1.即if($ 1 =“A”&& $ 2 == 1)打印值为$ 3。 我尝试使用awk但无法获得结果。

结果可能是

A 1  2
A 1  2
A 1  2
B 2  3
B 2  3
B 2  3 

提前感谢你

3 个答案:

答案 0 :(得分:2)

根据示例和您的代码,这可能会对您有所帮助:

awk 'NF==3{a[$1,$2]=$3}NF<3{$3=a[$1,$2]}7' file

答案 1 :(得分:1)

以下是应该执行的小awk

awk '$3!="" {t=$3} {$3=t} 1'    
A 1 2
A 1 2
A 1 2
B 2 3
B 2 3
B 2 3

或者这个:

 awk '$3 || $3=="0" {t=$3} {$3=t} 1' file

答案 2 :(得分:0)

尝试awk '{$3 == ""{print $0, var; next} {var=$3; print}' myfile

请注意,这仅适用于您的格式,并且仅当文件的第一行至少有第3列

由于我不知道验证对您的脚本至关重要,因此不会检查第二个字段的有效性(即即使您有2,这也会附加A 5 ),也不检查第一个(即,有这样的文件:

A 1 2
B 2

将输出

A 1 2
B 2 2

但是,如果您将其与形成的文件一起使用,就像您展示的那样,它将完全按照您的意愿工作。如果你添加

,这甚至可以工作
C 3 4
C 3
...