Loop through file to count field number

后端 未结 3 1858
一向
一向 2021-01-21 23:48

I have a script bash to add users from a .txt file. It is really simple:

name firstname uid gid

space separated values

I want to check

相关标签:
3条回答
  • 2021-01-22 00:29

    On UNIX you'll return 0 in case of success and !=0 in case of an error. For me it makes more sense to return 0 when all records have 4 fields and 1 when not all records have 4 fields.

    To achieve that, use exit:

    awk 'NF!=4{exit 1}' file
    

    FYI: awk will exit with 0 by default.

    If you want to use it in a shell conditional:

    #!/bin/bash
    if ! awk 'NF!=4{exit 1}' file ; then
        echo "file is invalid"
    fi
    

    PS: -F' ' in your example is superfluous because ' ' is the default field delimiter.

    0 讨论(0)
  • 2021-01-22 00:37

    Subtle changes to your script would do

    result=$(awk -F' ' 'BEGIN{flag=1}NF!=4{flag=0;exit}END{print flag}' "$file")
    [ ${result:-0} -eq 0 ] && echo "Problematic entries found in file"
    

    The approach

    • set the flag to 1 hoping that every record would contain 4 fields.
    • check if record actually contains 4 fields, if not set flag to zero and exit.
    • And exit would skip the rest of the input and go to the END rule.
    • print the flag and store it in result.
    • Check the result and proceed with the action course.
    0 讨论(0)
  • 2021-01-22 00:49

    You can use:

    awk 'res = NF!=4{exit} END{exit !res}' file
    

    This will exit with 1 if all rows have 4 columns otherwise it will exist with 0

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