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

打印第2、4、8、16行。。。使用awk,awk,gawk,Awk,Gawk,我正在尝试打印一个文件中每2、4、8、16等行的多行多列 这就是我所尝试的: awk 'BEGIN {N = 2} { {if (NR == N) {print; }} N = N*2 }' infile > outfile 但是,没有向outfile写入任何内容。 我错过了什么 以下是示例填充的内容: 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 创建了一个名为ou

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

这就是我所尝试的:

awk 'BEGIN {N = 2}
 {  
  {if (NR  == N) {print; }}
  N = N*2
 }' infile > outfile
但是,没有向outfile写入任何内容。 我错过了什么

以下是示例填充的内容:

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
时,您才会打印某些内容,这永远不是:

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

对于每条记录,您的
N
增加了一倍,但只有当
N
等于
NR
时,您才会打印某些内容,而这从来都不是:

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

您缺少awk语言的基础知识。阅读阿诺德·罗宾斯的《有效的Awk编程》第四版。尽管如此,您可能会看到一些输出,但如果您不发布一个包含简明、可测试的示例输入和预期输出的文章,我们也帮不了您。我添加了一个示例。而且,我现在没有时间读整本书。我试图通过网络上的例子来学习,我看不出有什么错。既然你不知道语言或范例,你怎么知道你在网络上可以从哪些例子中学习?我的经验是,大多数网上的例子都是非常离谱的,我想你会很快学会很多坏习惯,然后花上几年的时间,在学习如何正确使用awk之前就会忘记它们,就像你从那本书中学到的一样,但我想祝你好运!您缺少awk语言的基础知识。阅读阿诺德·罗宾斯的《有效的Awk编程》第四版。尽管如此,您可能会看到一些输出,但如果您不发布一个包含简明、可测试的示例输入和预期输出的文章,我们也帮不了您。我添加了一个示例。而且,我现在没有时间读整本书。我试图通过网络上的例子来学习,我看不出有什么错。既然你不知道语言或范例,你怎么知道你在网络上可以从哪些例子中学习?我的经验是,大多数网上的例子都是非常离谱的,我想你会很快学会很多坏习惯,然后花上几年的时间,在学习如何正确使用awk之前就会忘记它们,就像你从那本书中学到的一样,但我想祝你好运!