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

Print lines number 2, 4, 8, 16... using awk

我正在尝试每 2、4、8、16 等行打印一个多行多列的文件。

这是我试过的:

awk 'BEGIN {N = 2}
 {  
  {if (NR  == N) {print; }}
  N = N*2
 }' infile > 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 的文件,但其中没有任何内容。

每条记录都将 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