使用 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
我正在尝试每 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