替换CSV文件中特定列的值

时间:2019-02-22 19:53:18

标签: awk

我想将第5和第7列中大于20的值替换为AAA

输入文件

9179,22.4,-0.1,22.4,2.6,0.1,2.6,39179
9179,98.1,-1.7,98.11,1.9,1.7,2.55,39179
9179,-48.8,0.5,48.8,-1.2,-0.5,1.3,39179
6121,25,0,25,50,0,50,36121
6123,50,0,50,50,0,50,36123
6125,75,0,75,50,0,50,36125

output desired

9179,22.4,-0.1,22.4,2.6,0.1,2.6,39179
9179,98.1,-1.7,98.11,1.9,1.7,2.55,39179
9179,-48.8,0.5,48.8,-1.2,-0.5,1.3,39179
6121,25,0,25,AAA,0,AAA,36121
6123,50,0,50,AAA,0,AAA,36123
6125,75,0,75,AAA,0,AAA,36125

我尝试过

使用此命令,我也替换了第5列中的值,也如何替换第7列中的值。

awk -F ',' -v OFS=',' '$1 { if ($5>20) $5="AAA"; print}' file

预先感谢

2 个答案:

答案 0 :(得分:2)

awk 'BEGIN{FS=OFS=","} $5>20{$5="AAA"} $7>20{$7="AAA"}1' file
9179,22.4,-0.1,22.4,2.6,0.1,2.6,39179
9179,98.1,-1.7,98.11,1.9,1.7,2.55,39179
9179,-48.8,0.5,48.8,-1.2,-0.5,1.3,39179
6121,25,0,25,AAA,0,AAA,36121
6123,50,0,50,AAA,0,AAA,36123
6125,75,0,75,AAA,0,AAA,36125

您可以使用两个{..}进行多项检查和操作

答案 1 :(得分:2)

这是使列集可配置的另一种方法

$ awk -v cols="5,7" 'BEGIN {FS=OFS=","; split(cols,a)} 
                           {for(i in a) if($a[i]>20) $a[i]="AAA"}1' file 

9179,22.4,-0.1,22.4,2.6,0.1,2.6,39179
9179,98.1,-1.7,98.11,1.9,1.7,2.55,39179
9179,-48.8,0.5,48.8,-1.2,-0.5,1.3,39179
6121,25,0,25,AAA,0,AAA,36121
6123,50,0,50,AAA,0,AAA,36123
6125,75,0,75,AAA,0,AAA,36125