开发者

Number of fields returned by awk

Is th开发者_高级运维ere 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


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


NF gives the number of fields for a given record:

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


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


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜