我是 AWK 的初学者。我刚刚学习了内置变量和 for 循环。从教程中我开始知道 NF 表示记录中的字段数..我用它来计算数据库每条记录中的字段数,如下所示。
数据库名称:学生
Annie 101 56 89
Joy 102 78 56
rinken 103 45
Run Code Online (Sandbox Code Playgroud)
并对其执行以下代码
awk '{print NR,"->",NF}' student
Run Code Online (Sandbox Code Playgroud)
所以它给出如下输出..
1 -> 4
2 -> 4
3 -> 3
Run Code Online (Sandbox Code Playgroud)
所以很明显它适用于现场..但在下面的数据库中它的工作方式不同数据库名称:练习
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
我对其执行了以下命令来总结所有数据
awk '{for(i=1;i<=NF;i++) total=total+$i}; END {print total} ' practice
Run Code Online (Sandbox Code Playgroud)
输出 :
15
Run Code Online (Sandbox Code Playgroud)
那么NF在第二个例子中是如何工作的。所以我的问题是它如何计算输出,因为只有一个字段。那么循环会工作多少次?
awk
在每一行上顺序运行,因此对于它解析的每一行,它都会循环到每一行中的总列数1
。
所以理想情况下它解析为,
awk '{for(i=1;i<=NF;i++) total=total+$i}; END {print total} ' practice
# value of i=1,NF=1 total=0+1 (1) NR=1
# value of i=1,NF=1 total=1+2 (3) NR=2
# value of i=1,NF=1 total=3+3 (6) NR=3
# value of i=1,NF=1 total=6+4 (10) NR=4
# value of i=1,NF=1 total=10+5 (15) NR=5
Run Code Online (Sandbox Code Playgroud)
并将所有列1
条目汇总在一起,您可以这样做
awk '{ sum += $1 } END { print sum }'
Run Code Online (Sandbox Code Playgroud)