为什么我的for循环在AWK中运行并重置?

时间:2014-03-22 18:42:34

标签: bash shell if-statement for-loop awk

我真的似乎无法理解AWK以及它是如何工作的。我有这个代码

    awk '{ for(i=0; i<NR; i++)print i}'

我正在阅读的文件有四行,有五列。 它最终打印

0
1
2
3
0
1
2
3
0
1
2
3
0
1
2
3
0
1
2
3

为什么我重置和打印的次数不同很多次? 我只想为每一行打印一次。我似乎无法理解AWK中的for循环并打印出一行。还有人可以向我解释AWK是如何工作的吗?!?

我希望能够遍历每一行并测试if语句,如果是这样打印,但我的if语句将运行与程序中的行一样多次。我已经厌倦了到处寻找答案,但是在AWK上找不到任何有用的东西。我正在寻找关于for循环,if语句以及如何在AWK中进行打印的非常直接的答案。非常感谢你!!

更新问题:
我想读一个有这个内容的文件
0 0 0 1
0 0 0 0
0 1 0 1
2 0 0 0

我希望能够遍历每一行并添加行中的所有数字,如果行的总数大于0,则打印该行,否则不打印。
我也想知道如何打印一个数字,以确定有多少行 因此,如果文件有6行,则输出为:
1
2
3
4
5
6

再次感谢你!

1 个答案:

答案 0 :(得分:2)

awk一次从输入文件中读取一条记录,将记录拆分为字段,然后在脚本包含的当前记录上执行脚本

<condition> { <action> }

语句。如果action在给定当前记录时为真,则执行condition。默认条件为true,默认操作为打印当前记录。

使用awk打印输入文件中的每一行是:

awk '1' file

因为1是一个真实的条件,因此会调用打印当前记录的默认操作。

欲了解更多信息,请阅读Arnold Robbins的书“Effective Awk Programming,Third Edition”并更新您的问题以提供样本输入,期望以及如果您正在尝试做什么的更具体描述还是不确定。

更新了您的问题,以下是第一部分(I want to be able to go through each line and add all the numbers in the row and if the row's total is greater than 0 than print the line if not then do not print it.

的操作方法
$ cat file
0 0 0 1
0 0 0 0
0 1 0 1
2 0 0 0

$ awk '{sum=0; for (i=1;i<=NF;i++) sum+=$i} sum>0' file
0 0 0 1
0 1 0 1
2 0 0 0

我不知道为什么问题的第二部分(I want to be to just know how to go print a number for how many lines there are)会显示您发布的预期输出。请参考您发布的示例输入文件,并告诉我们您希望从该输入文件输出什么。哦等等,你是说要打印文件中的行号? 那就是:

$ awk '{print NR}' file
1
2
3
4