Number of fields returned by awk

半腔热情 提交于 2020-04-07 14:34:13

问题


Is there a way to get awk to return the number of fields that met a field-separator criteria? Say, for instance, my file contains

a b c d

so, awk --field-separator=" " | <something> should return 4


回答1:


The NF variable is set to the total number of fields in the input record. So:

echo "a b c d" | awk --field-separator=" " "{ print NF }"

will display

4

Note, however, that:

echo -e "a b c d\na b" | awk --field-separator=" " "{ print NF }"

will display:

4
2

Hope this helps, and happy awking




回答2:


NF gives the number of fields for a given record:

[]$ echo "a b c d" | gawk '{print NF}'
4



回答3:


If you would like to know the set of all the numbers of fields in a multiline content you can run:

X | awk '{print NF}' | sort -n | uniq

being X a command that outputs content in the standard output: cat, echo, etc. Example:

With file.txt:

a b
b c
c d
e t a
e u

The command cat file.txt | awk '{print NF}' | sort -n | uniq will print:

2
3

And with file2.txt:

a b
b c
c d
e u

The command cat file2.txt | awk '{print NF}' | sort -n | uniq will print:

2



回答4:


awk(1) on FreeBSD does not recognize --field-separator. Use -v instead:

echo "a b c d" | awk -v FS=" " "{ print NF }"

It is a portable, POSIX way to define the field separator.



来源:https://stackoverflow.com/questions/5582405/number-of-fields-returned-by-awk

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!