请解释这个awk脚本

时间:2014-01-15 22:53:22

标签: awk

echo "45" | awk 'BEGIN{FS=""}{for (i=1;i<=NF;i++)x+=$i}END{print x}'

我想知道这是如何工作的,具体是什么awk Fs,NF在这里做什么?

3 个答案:

答案 0 :(得分:3)

FS是字段分隔符。将其设置为""(空字符串)意味着每个字符都是一个单独的字段。因此,在您的情况下,您有两个字段:45

NF是给定记录中的字段数。就你而言,那是2。因此i的范围从12,这意味着$i的值为45

因此,这个AWK脚本遍历字符并打印它们的总和 - 在本例中为9

答案 1 :(得分:1)

这些是内置变量,FS是字段分隔符 - 空白意味着将每个字符分开。 NF是由FS分割的Num字段...所以在这种情况下,字符数为2,因此将输入分成每个字符(“4”,“5”),迭代每个字符(2),同时添加它们的值,打印结果。

http://www.thegeekstuff.com/2010/01/8-powerful-awk-built-in-variables-fs-ofs-rs-ors-nr-nf-filename-fnr/

答案 2 :(得分:1)

FS是字段分隔符。通常,字段由空格分隔,但是当您将FS设置为空字符串时,输入行的每个字符都是一个单独的字段。

NF是当前输入行中的字段数。由于每个字符都是一个字段,在这种情况下,它是字符数。

然后for循环遍历该行上的每个字符,并将其添加到x。所以这是在输入中添加每个数字的值;对于45,它会添加4+5并打印9