echo "45" | awk 'BEGIN{FS=""}{for (i=1;i<=NF;i++)x+=$i}END{print x}'
我想知道这是如何工作的,具体是什么awk Fs,NF在这里做什么?
答案 0 :(得分:3)
FS
是字段分隔符。将其设置为""
(空字符串)意味着每个字符都是一个单独的字段。因此,在您的情况下,您有两个字段:4
和5
。
NF
是给定记录中的字段数。就你而言,那是2
。因此i
的范围从1
到2
,这意味着$i
的值为4
和5
。
因此,这个AWK脚本遍历字符并打印它们的总和 - 在本例中为9
。
答案 1 :(得分:1)
这些是内置变量,FS是字段分隔符 - 空白意味着将每个字符分开。 NF是由FS分割的Num字段...所以在这种情况下,字符数为2,因此将输入分成每个字符(“4”,“5”),迭代每个字符(2),同时添加它们的值,打印结果。
答案 2 :(得分:1)
FS
是字段分隔符。通常,字段由空格分隔,但是当您将FS
设置为空字符串时,输入行的每个字符都是一个单独的字段。
NF
是当前输入行中的字段数。由于每个字符都是一个字段,在这种情况下,它是字符数。
然后for
循环遍历该行上的每个字符,并将其添加到x
。所以这是在输入中添加每个数字的值;对于45
,它会添加4+5
并打印9
。