Tab separated values in awk

后端 未结 6 1560
一向
一向 2020-11-30 21:40

How do I select the first column from the TAB separated string?

# echo \"LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01\" | awk -F\'\\t\' \'{print $1}\'         


        
相关标签:
6条回答
  • 2020-11-30 22:04

    Make sure they're really tabs! In bash, you can insert a tab using C-v TAB

    $ echo "LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01" | awk -F$'\t' '{print $1}'
    LOAD_SETTLED
    
    0 讨论(0)
  • 2020-11-30 22:05

    You need to set the OFS variable (output field separator) to be a tab:

    echo "$line" | 
    awk -v var="$mycol_new" -F $'\t' 'BEGIN {OFS = FS} {$3 = var; print}'
    

    (make sure you quote the $line variable in the echo statement)

    0 讨论(0)
  • 2020-11-30 22:05

    You can set the Field Separator:

    ... | awk 'BEGIN {FS="\t"}; {print $1}'
    

    Excellent read:

    https://docs.freebsd.org/info/gawk/gawk.info.Field_Separators.html

    0 讨论(0)
  • 2020-11-30 22:08
    echo "LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01" | awk -v var="test" 'BEGIN { FS = "[ \t]+" } ; { print $1 "\t" var "\t" $3 }'
    
    0 讨论(0)
  • 2020-11-30 22:21

    Should this not work?

    echo "LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01" | awk '{print $1}'
    
    0 讨论(0)
  • 2020-11-30 22:27

    Use:

    awk -v FS='\t' -v OFS='\t' ...
    

    Example from one of my scripts.

    I use the FS and OFS variables to manipulate BIND zone files, which are tab delimited:

    awk -v FS='\t' -v OFS='\t' \
        -v record_type=$record_type \
        -v hostname=$hostname \
        -v ip_address=$ip_address '
    $1==hostname && $3==record_type {$4=ip_address}
    {print}
    ' $zone_file > $temp
    

    This is a clean and easy to read way to do this.

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