Awk: Print specific value range

Say i have:

> id|lastName|firstName|gender|birthday|creationDate|locationIP|browserUsed
> 
> 13194139534963|Berty|Jean|male|1988-08-02|2012-04-02T08:33:15.012+0000|41.216.190.153|Google
> Chrome
> 
> 13194139535544|Oliveira|Manuel|male|1984-10-31|2012-03-14T16:00:12.287+0000|109.71.166.230|Internet
> Explorer
> 
> 13194139537327|Wei|Lei|male|1987-01-06|2012-03-13T03:07:51.899+0000|27.99.188.150|Internet
> Explorer
> 
> 13194139539118|Alvarez|Monica|male|1989-10-17|2012-02-25T19:18:54.137+0000|190.169.213.242|Internet
> Explorer
> 
> 13194139539746|Xu|Wei|female|1986-11-30|2012-03-19T23:16:12.495+0000|27.103.77.193|Firefox

I want to make a command with those parameters : ./tool.sh --born-since dateA --born-until dateB -f file

1)If born-since and born-until dates are given i want to print all those born(the whole line)between two specific dates ( Year-Month-Date ) Example ./tool.sh --born-since 1988-08-02 --born-until 2012-09-13 -f file Output:

 13194139534963|Berty|Jean|male|1988-08-02|2012-04-02T08:33:15.012+0000|41.216.190.153|Google
13194139539118|Alvarez|Monica|male|1989-10-17|2012-02-25T19:18:54.137+0000|190.169.213.242|Internet
 Explorer

2)If only born-since date is given i want to list all the people(whole line) with born dates of that and after. Example: ./tool.sh --born-since 1988-08-02 -f file Output: Same as 1)

3)If only born-until date is given i want to list all the people born until that date(again the whole line about them). ./tool.sh --born-until 1988-08-02 -f file Output:

13194139535544|Oliveira|Manuel|male|1984-10-31|2012-03-14T16:00:12.287+0000|109.71.166.230|Internet Explorer
13194139537327|Wei|Lei|male|1987-01-06|2012-03-13T03:07:51.899+0000|27.99.188.150|Internet Explorer
13194139539746|Xu|Wei|female|1986-11-30|2012-03-19T23:16:12.495+0000|27.103.77.193|Firefox

My code is :

while [ $# -gt 0 ];do #Get and store Dates (Since-Until)
    if [ "$1" = --born-since  ];then
    if [[ "$2" =~ $re ]];then    #re='[0-9]-*' # Check if $2 is number                               
        BSDate=$2
        BSYear=$(echo "$BSDate" | awk -F '-' '{print $1}') # Get BSYear
        BSMonth=$(echo "$BSDate" | awk -F '-' '{print $2}') # Get BSMonth
        BSDay=$(echo "$BSDate" | awk -F '-' '{print $3}') # Get BSDay   
    fi
    elif [ "$1" = --born-until ];then
    if [[ "$2" =~ $re ]];then
            BUDate=$2
        BUYear=$(echo "$BUDate" | awk -F '-' '{print $1}') # Get BUYear
            BUMonth=$(echo "$BUDate" | awk -F '-' '{print $2}') # Get BUMonth
                BUDay=$(echo "$BUDate" | awk -F '-' '{print $3}') # Get BUDay
        fi
    fi
shift
done
    if [ "$BSDate" ] && [ "$BUDate" ];then #If both date arguments exist

    elif [ "$BSDate" ];then


    elif [ "$BUDate" ];then

    fi

If i enter --born-since 1998-10-30 the arguments get passed correctly for evaluation in awk , 1998 = BSYear , 10 = BSMonth , 30 = BSDay. Can someone help me implement the awk part ?

Upvotes: 0

Views: 286

Answers (2)

I fixed it with : awk -F'|' '{if ($5 >= "'$BSDate'" && $5 <= "'$BUDate'")

Upvotes: 0

ctac_
ctac_

Reputation: 2471

For the awk part :

cat  ./tool.sh
awk -F'|' -vs="$1" -ve="$2" '
 BEGIN{if(!s)s="0000-00-00";if(!e)e="9999-99-99"}
 NR>1 && $5>=s && $5<=e' infile

And you call it like that

./tool.sh '1987-01-06' '1988-08-02'

or

./tool.sh '' '1988-08-02'

or

./tool.sh '1987-01-06' ''

Upvotes: 1

Related Questions