OXXO
OXXO

Reputation: 724

Replace value in particular columns in csv file

I would like to replace the values which are > than 20 in columns 5 and 7 to AAA

input 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,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

I tried

With this command I replace the values in column 5, how to do it for column 7 too.

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

Thanks in advance

Upvotes: 0

Views: 57

Answers (2)

karakfa
karakfa

Reputation: 67467

here is another take for making the columns set configurable

$ 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

Upvotes: 2

P....
P....

Reputation: 18351

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

You can use two {..} for multiple checks and action

Upvotes: 2

Related Questions