简体   繁体   中英

AWK: Add number to the column for specific line

I have a data file of:

1  2  3
1  5  7
2  5  9
11 21 110
6  17 -2
10 2  8
6  4  3
5  1  8
6  1  5
7  3  1

I want to add number 1 to the third column, only for line number 1, 3, 6, 8, 9, 10. And add 2 to the second column, for line number 6~9.

I know how to add 2 to entire second column, and add 1 to entire third column using awk

awk '{print $1, $2+2, $3+1}' data > data2

But how can I modify this code to specific lines of second and third column?

Thanks

Best,

awk to the rescue! You can check for NR in the condition, but for 6 values it will be tedious, alternatively you can check for string match with anchored NR.

$ awk 'BEGIN{lines=",1,3,6,8,9,10,"}
       match(lines,","NR","){$3++}
   NR>=6 && NR<=9{$2+=2}1' nums  

1 2 4
1  5  7
2 5 10
11 21 110
6  17 -2
10 4 9
6 6 3
5 3 9
6 3 6
7 3 2
$ cat tst.awk
BEGIN {
    for (i=6;i<=9;i++) {
        d[2,i] = 2
    }

    split("1 3 6 8 9 10",t);
    for (i in t) {
        d[3,t[i]] = 1
    }
}
{ $2 += d[2,NR]; $3 += d[3,NR]; print }

$ awk -f tst.awk file
1 2 4
1 5 7
2 5 10
11 21 110
6 17 -2
10 4 9
6 6 3
5 3 9
6 3 6
7 3 2

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM