strip leading zeros in awk program

后端 未结 5 1485
孤城傲影
孤城傲影 2020-12-19 20:28

So I\'m pretty lost as I missed a week and am playing catch up, but I\'m to write an awk program to tell the difference, in days, between two dates.

I\'m more or les

相关标签:
5条回答
  • 2020-12-19 21:11

    You need this, assuming your variable is called month:

    gsub ("^0*", "", month);
    

    The ^ is the start anchor and 0* means zero or more 0 characters. So this effectively removes all 0 characters at the start of the variable.

    By way of example (which also shows a way to do it to the middle number as well, before splitting the date apart, see the second gsub for that):

    pax> echo '1/1/2013
    03/12/2014
    02/02/1965' | awk '{gsub ("^0*", "", $0); gsub ("/0*", "/", $0); print}'
    
    1/1/2013
    3/12/2014
    2/2/1965
    
    0 讨论(0)
  • 2020-12-19 21:14

    Another option:

    $ echo 01234 | awk '{x=$0+0;print x}'
    1234
    
    0 讨论(0)
  • 2020-12-19 21:27

    I'm sorry. My answer is not about awk, and it is about bash itself. So please don't give a minus for my comment)

    echo -e "00000000" | sed -r 's/^[0]*$/0/g' | sed -r 's/^0[0]+//g'
    

    Or perform integer calculations with (( )) notations

    echo $((0000))
    
    0 讨论(0)
  • 2020-12-19 21:29

    I tried the answer suggested by @paxdiablo. It ended up stripping the non-leading zeros as well.

    $ echo '20/02/1965' | awk '{gsub ("^0*", "", $0); gsub ("/0*", "/", $0); print}'
    2/2/1965
    

    Using sub instead gsub worked fine for me.

    $ echo '20/02/1965' | awk '{sub ("^0*", "", $0); sub ("/0*", "/", $0); print}' 
    20/2/1965
    
    0 讨论(0)
  • 2020-12-19 21:30

    Latest contribution somewhat shortened.

    echo '20/02/1965' | awk '{sub ("/0", "/", $0)}1'
    20/2/1965
    
    0 讨论(0)
提交回复
热议问题