【问题标题】:AWK: Add number to the column for specific lineAWK:将数字添加到特定行的列
【发布时间】:2016-03-18 08:44:44
【问题描述】:

我有一个数据文件:

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 添加到第二列,用于行号 6~9。

我知道如何将 2 加到整个第二列,并使用 awk 将 1 加到整个第三列

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

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

谢谢

最好的,

【问题讨论】:

  • AWK 有 rhis 的 $NR 变量

标签: bash awk


【解决方案1】:

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

【讨论】:

  • 或者,BEGIN {a[1];a[3];a[6];a[8];a[9];a[10]}; NR in a {$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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多