Number of fields returned by awk

后端 未结 4 1658
抹茶落季
抹茶落季 2021-02-03 23:50

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,

相关标签:
4条回答
  • 2021-02-04 00:10

    NF gives the number of fields for a given record:

    []$ echo "a b c d" | gawk '{print NF}'
    4
    
    0 讨论(0)
  • 2021-02-04 00:22

    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
    
    0 讨论(0)
  • 2021-02-04 00:27

    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 讨论(0)
  • 2021-02-04 00:34

    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

    0 讨论(0)
提交回复
热议问题