converting 6 digit column to dates format


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers converting 6 digit column to dates format
# 1  
Old 10-05-2005
converting 6 digit column to dates format

Hi everyone,

I have problem where I need to convert numbers to date format and then figure out what is less than or equal to specific date, the data comes out of a report in the following format

071205
141005
091205
111105
051005
141005
261005
181005

so I need to firstly run through the file taking the first line as the 7th of December 2005 etc, etc!, after which I then need to be able to extract the ones that are equal to or less than a given date


any help would be greatly appreciated...
# 2  
Old 10-05-2005
This might be complex but the below script will give you the dates lesser than the passed date

Code:
#!/bin/ksh
inputdate=`echo $1 | sed 's/^\(..\)\(..\)\(..\)$/\3\2\1/'`
for i in `sed 's/^\(..\)\(..\)\(..\)$/\3\2\1/' datafile| sort -n`
do
if [ i -le inputdate ] 
then
echo $i | sed 's/^\(..\)\(..\)\(..\)$/\3\2\1/' 
fi
done

# 3  
Old 10-05-2005
Change the date for /tmp/BASE as you need

gerry.txt is the file containing the 6-digit date format

Code:
#! /bin/sh
# gerry.sh
# input  071205
# output Dec 07 2005
#

# Base date is Oct 19, 2005.
touch -d "Oct 19 05" /tmp/BASE 

while read line
do
        DAY=${line%????}
        line=${line#$DAY}
        MON=${line%??}
        YR=${line#??}

        case "$MON" in
        "01") mon=Jan ;;
        "02") mon=Feb ;;
        "03") mon=Mar ;;
        "04") mon=Apr ;;
        "05") mon=May ;;
        "06") mon=Jun ;;
        "07") mon=Jul ;;
        "08") mon=Aug ;;
        "09") mon=Sep ;;
        "10") mon=Oct ;;
        "11") mon=Nov ;;
        "12") mon=Dec ;;
        esac

        touch -d "$mon $DAY $YR" /tmp/FILEOLD
        if [ "/tmp/FILEOLD" -nt "/tmp/BASE" ] ; then
        echo "$mon $DAY $YR is newer"
        else
        echo "$mon $DAY $YR is older"
        fi ;
done < gerry.txt

rm -f /tmp/BASE /tmp/FILEOLD

vino
# 4  
Old 10-05-2005
dates

Hi thanks for those, but none of them seem to work on my flavour DataGeneral unix

monsanbu

From the first script I get lots of the following:
inputdate: bad number
inputdate: bad number
inputdate: bad number
inputdate: bad number
inputdate: bad number
inputdate: bad number
inputdate: bad number
inputdate: bad number
inputdate: bad number
inputdate: bad number
inputdate: bad number
inputdate: bad number

VINO
I don't seem to have the "-d" option, so I have dumped an extract from the man pages below to hopefully help in solving

SYNOPSIS
touch [ -amc ] [-r ref_file | -t time] files
touch [ -amc ] [ mmddhhmm[yy] ] files

DESCRIPTION
Touch updates the access and modification times of each argument. If no time is specified the current time is used.
(See date(1) for a description of the second synopsis' time format.)

Options are:

-a Update only the access time.

-m Update only the modification time.

If neither -a nor -m is specified, the effect is the same as
-am.

-c Silently prevent touch from creating the file if it did not
previously exist.

-r ref_file
Use the corresponding time of ref_file instead of the current
time.

-t time Use time instead of the current time. time is a decimal
number of the form:
[[CC]YY]MMDDhhmm[.SS]

where each two digits represent the following:
MM month of the year (01-12)
DD day of the month (01-31)
hh hour of the day (00-23)
mm minute of the hour (00-59)
CC first two digits of the year (the century)
YY second two digits of the year
SS second of the minute (0-61)

CC and YY are optional. If neither is given, the current
year is assumed. If YY is specified, but CC is not, CC is
derived as follows:
If YY is: CC becomes:
------------------------
69-99 19
00-68 20

The range for SS is (00-61), because of leap seconds. If SS
is 60 or 61 and the resulting time, as affected by the TZ
environment variable, does not refer to a leap second; the
resulting time shall be one or two seconds after a time where
SS is 59. If SS is not given it is assumed to be zero.

DIAGNOSTICS
The following exit values are returned:

0 The utility executed successfully and all requested changes
were made.

>0 An error occurred.

SEE ALSO
date(1).
utime(2)

NOTESe--
The -t time option should be used in preference to the second
synopsis usage, since the second synopsis may not be supported in
future releases.

Last edited by Gerry405; 10-05-2005 at 11:09 AM..
# 5  
Old 10-05-2005
Change

Code:
touch -d "Oct 19 05" /tmp/BASE

to
Code:
touch -t 0509190000 /tmp/BASE

and

Code:
touch -d "$mon $DAY $YR" /tmp/FILEOLD

to
Code:
touch -t "$YR$mon$DAY0000" /tmp/FILEOLD

Vino
# 6  
Old 10-05-2005
dates

Hi Again Vino,


Sorry to be a pain but I now get an error..
UX:sh (./DateVino): ERROR: Bad substitution

#! /bin/sh
# gerry.sh
# input 071205
# output Dec 07 2005
# Base date is Oct 19, 2005.

touch -t 0509190000 /tmp/BASE

while read line
do
DAY=${line%????}
line=${line#$DAY}
MON=${line%??}
YR=${line#??}

case "$MON" in
"01") mon=Jan ;;
"02") mon=Feb ;;
"03") mon=Mar ;;
"04") mon=Apr ;;
"05") mon=May ;;
"06") mon=Jun ;;
"07") mon=Jul ;;
"08") mon=Aug ;;
"09") mon=Sep ;;
"10") mon=Oct ;;
"11") mon=Nov ;;
"12") mon=Dec ;;
esac
touch -t "$YR$mon$DAY0000" /tmp/FILEOLD
if [ "/tmp/FILEOLD" -nt "/tmp/BASE" ] ; then
echo "$mon $DAY $YR is newer"
else
echo "$mon $DAY $YR is older"
fi ;
done < gerry.txt

rm -f /tmp/BASE /tmp/FILEOLD
# 7  
Old 10-05-2005
Vino, you are on Linux. Your /bin/sh is really bash. Gerry405, your /bin/sh is really the Bourne shell. You will need to use ksh or bash to run that script.
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Converting dates to iso format

Hi , i am trying to read a tsv file record by record and change the date column with iso date format. it have different dates with format like mm/dd/yyyy HH:MM:SS EST ,i am trying serarch for the date format lke this yyyy-mm-dd HH:MM:SS EST and replace to it if dosent match that format . Any... (2 Replies)
Discussion started by: vikatakavi
2 Replies

2. Shell Programming and Scripting

Converting Single Column into Multiple rows, but with strings to specific tab column

Dear fellows, I need your help. I'm trying to write a script to convert a single column into multiple rows. But it need to recognize the beginning of the string and set it to its specific Column number. Each Line (loop) begins with digit (RANGE). At this moment it's kind of working, but it... (6 Replies)
Discussion started by: AK47
6 Replies

3. UNIX for Dummies Questions & Answers

Converting column to rows for every 3 lines in the column

Hi gurus! Please help me with this one. I have an file with the following contents: a b c d e f g h i j I would like to make to transform it to look like this as my output file: a,b,c d,e,f (4 Replies)
Discussion started by: kokoro
4 Replies

4. Shell Programming and Scripting

command for converting 4 column data to 1 column

dear friends I want to convert four column data to one column data. For example: from 1, 2, 3, 4 5, 6, 7, 8to 1 2 3 4 5 6 7 8what is the general command for that type of convertion. thanks (5 Replies)
Discussion started by: rpf
5 Replies

5. Shell Programming and Scripting

Converting windows format file to unix format using script

Hi, I am having couple of files which i used to copy from windows to Linux, so now in case of text files (CTRL^M) appears at end of line. I know i can convert this windows format file to unix format file by running dos2unix. My requirement here is that i want to do it automatically using a... (5 Replies)
Discussion started by: sarbjit
5 Replies

6. Shell Programming and Scripting

Dates not comparing correct even the same format

I have the date of the file passed into a variable also current date formatted same passed into a separate variable and compare the two with an if statement and statement always comes up false. Even though I verified the dates. Any help would be awesome. Filecrtdate=`ls -l $i | awk '{print... (19 Replies)
Discussion started by: coderanger
19 Replies

7. Shell Programming and Scripting

Split large file based on last digit from a column

Hello, What's the best way to split a large into multiple files based on the last digit in the first column. input file: f 2738483300000x0y03772748378831x1y13478378358383x2y23743878383802x3y33787828282820x4y43748838383881x5y5 Desired Output: f0 3738483300000x0y03787828282820x4y4 f1... (9 Replies)
Discussion started by: alain.kazan
9 Replies

8. Shell Programming and Scripting

Need script to generate all the dates in DDMMYY format between 2 dates

Hello friends, I am looking for a script or method that can display all the dates between any 2 given dates. Input: Date 1 290109 Date 2 010209 Output: 300109 310109 Please help me. Thanks. :):confused: (2 Replies)
Discussion started by: frozensmilz
2 Replies

9. UNIX for Advanced & Expert Users

Select entries between two dates by converting Unix timestamp in Oracle Database.

Hi, I need to select the entries between two dates from an Oracle db. The Oracle db has a column with Unix timestamps. I use the following querry, but it doesnt seem to be working as desired. select count(*) from reporter_status where to_char(FIRSTOCCURRENCE, 'mm-dd-yy') between ('08-07-06')... (1 Reply)
Discussion started by: amitsayshii
1 Replies

10. Shell Programming and Scripting

Format dates

I have a date that is received as text in Jan 1 2002 12:00AM format. Can anyone give me any ideas how to format that in oracle format i.e. 01-JAN-02 (1 Reply)
Discussion started by: jinky
1 Replies
Login or Register to Ask a Question