我正在尝试打印包含许多行和多列的文件的每个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的文件但其中没有任何内容。
答案 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