AWK:为特定行

时间:2016-03-17 23:46:31

标签: bash awk

我有一个数据文件:

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

我想将数字1添加到第三列,仅适用于行号1,3,6,8,9,10。并将第2列添加2,行号为6~9。

我知道如何在整个第二列中添加2,并使用awk

在整个第三列中添加1
awk '{print $1, $2+2, $3+1}' data > data2

但是如何将此代码修改为第二列和第三列的特定行?

谢谢

最好,

2 个答案:

答案 0 :(得分:2)

awk救援!您可以在条件中检查NR,但是对于6个值,它将是繁琐的,或者您可以检查与锚定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

答案 1 :(得分:0)

$ 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