使用awk打印第2,4,8,16行......

时间:2016-05-26 21:51:31

标签: awk gawk

我正在尝试打印包含许多行和多列的文件的每个2,4,8,16等行。

这就是我的尝试:

awk 'BEGIN {N = 2}
 {  
  {if (NR  == N) {print; }}
  N = N*2
 }' infile > outfile

但是,没有任何内容写入outfile。 我错过了什么?

以下是示例infile的内容:

1 10
2 20
3 30
4 40
5 50
6 60
7 70
8 80
9 90
10 100

预期输出

2 20
4 40
8 80

创建一个名为outfile的文件但其中没有任何内容。

1 个答案:

答案 0 :(得分:2)

您为每条记录加倍N,但如果N等于NR,则只打印一些内容 - 这绝不是:

Line     Value of N
1        2
2        4
3        8
...

要解决此问题,您必须移动N的倍增,以便仅在NR == N为真时才会发生:

awk -v n=2 'NR == n { print; n *= 2 }'

我已经移动了在程序之外分配初始值,由于个人偏好使用了小写n,并清理了程序内部:如果条件NR == n为真,那么打印记录并加倍n

在示例输入上运行:

$ awk -v n=2 'NR==n {print; n *= 2}' infile
2 20
4 40
8 80