Changing CSV files with date . Subtracting date by values


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Changing CSV files with date . Subtracting date by values
# 8  
Old 11-02-2018
It worked partially
Code:
(K>)  awk -f change.awk input.csv
id,description,type,year
994475;1832 +  S PP1829 10/17/18;S;P201829;115;N;4,4;M;0;xx994475;*;BA7005;10/17/2018 16:48
994477;1836 +  S PP1833 10/17/18;S;P201833;115;N;4,4;M;0;xxh994477;*;BA7005;10/17/2018 16:48
994479;CONTROL 1452-1527,1552-1627;S;P201522;115;N;4,4;M;0;RHS_12_1510FF_0706;*;B7005;10/17/2018 16:49

in the above output on row 1, column 2 it is still 1832 + S PP1829 10/17/18. It updated the part after + but 1832 should be 1816 that is not changed
In row 2 .column2 - It did't update update the same as above 1836 should be as 1830
in row 3 column 2 - ;CONTROL 1452-1527,1552-1627 not record is updated. It should be ;CONTROL 1446-1521,1545-1621
# 9  
Old 11-03-2018
Quote:
Originally Posted by arunkumar_mca
......
It updated the part after + but 1832 should be 1816 that is not changed
....
Is the above a mistake, since you posted subtraction bigger then 5 or 6 and above is 16 ?

Well you really gave me a challenge for one who doesn't code like this on a daily basis Smilie
This is surely growing into a monster without creating very big arrays and manipulating those in END condition.

Code assumes that the string RHS_12_1510FF_0706 will always have 4 values if separated by _ and started with RHS on $10 field
And on the same line $2 field will start with string CONTROL having 2 values if separated by space char.

Or to color a bit red string has two values when seperated by space, while blue string has 4 values when separated by _.
Lines which do not match both conditions (containing both blue and red) will not be processed by that specific code part (marked as green in whole program)
Code:
994479;CONTROL 1446-1521,1546-1621;S;P201921;115;N;4,4;M;0;RHS_12_1519FF_0706;*;B7005;10/17/2018 16:49

I'm trying to write this, so the program can run with small memory footprint on large files, keeping the original order in file untouched.
Hopefully others more experienced awkers can tell me if i succeeded or this is just a mess.
Feel free to chip in boys Smilie

Code:
BEGIN {
OFS=FS=";"
mweek=52
}

NR > 1 {
match($4,/P[12][0-9][0-9][0-9][0-5][0-9]/)
dw=substr($4,RSTART+1,RLENGTH-1)
year=substr(dw,1,4)
week=substr(dw,5,6)
variance=( year > 2015 ) ? 6 : 5

if ( ($10 ~ /^RHS/) && ($2 ~ /^CONTROL/) ) {
	split($10,g,"_")
	u=g[1]"_"g[2]"_"int(g[3]) - variance"FF_"g[4]
	sub($10,u,$10)
	
	split($2,c," ") ; gsub(",|-"," ",c[2]) ; split(c[2],e," ")
	fnl=e[1] - variance "-" e[2] - variance "," e[3] - variance "-" e[4] - variance
	sub($2,"CONTROL " fnl,$2)
	}

if ( match($2,/PP[0-9]+/) ) {
	a="PP"substr($2,RSTART+2,RLENGTH-2) - variance
	sub(substr($2,RSTART,RLENGTH),a,$2)
	}

if ( match($2,/^[0-9]+/) ) {
	f=substr($2,RSTART,RLENGTH) - variance
	sub("^[0-9]+",f,$2)
	}
	 
if ( int(week) == variance ) {
	week=mweek ; year=year - 1 ; sub(dw,year week,$0)
	}
else if ( int(week) < variance ) {
	week=mweek - (variance - week) ; year=year-1 ; sub(dw,year week,$0)
	}
	else {
	week=sprintf("%02d",week - variance) ; sub(dw,year week,$0)
	}

} 1

Hope that helps
Regards
Peasant
This User Gave Thanks to Peasant For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Subtracting a date based on ls output

I am trying to achieve to get only the month and the day. Example Feb 5 (as you can see if it is feb 1-9) the space is 2. If it is feb 10-28, the space is only 1. I am trying to right a script that will list a directory and shoot an email if there is an activity in last 7 days. I dont really trust... (5 Replies)
Discussion started by: invinzin21
5 Replies

2. Shell Programming and Scripting

Subtracting months from passed Date

Hi All, I am getting a date from environment variable and want to do some processing by subtracting 2 months from the date passed through the environment variable. I am trying the following syntax : date_var=2014-08-31 date_2M_ago='$date_var+"%d%m%y" --$date_var="2 months ago" '... (3 Replies)
Discussion started by: Rahul Raj
3 Replies

3. Shell Programming and Scripting

Adding/ Subtracting from Date

Hi , How can I add/substruct x number of days with date? For example My_Date=`date` Now I need Hope it's clear. (2 Replies)
Discussion started by: Anupam_Halder
2 Replies

4. Shell Programming and Scripting

Changing date format in CSV file

I have a CSV file with a date format like this; 11/19/2012 17:37:00,1.372,121.6 11/19/2012 17:38:00,0.743,121.6 Want to change the time stamp to seconds after 1970 so I can get the data in rrdtool. For anyone interested, this is data from a TED5000 unit and is Kwatts and volts. Needs to... (3 Replies)
Discussion started by: ottsm
3 Replies

5. Shell Programming and Scripting

SQL one liner for subtracting 1 from date

I got a statement like below to subtract 1 from given date using teradata. I am looking for a one line unix command to perform the same. select 'parse_this_record', (DATE '${FILE_DATE}' - 1) (FORMAT 'YYYY-MM-DD'); Input: 2012-02-21 Expected Output: 2012-02-20 PS: One liner because I am... (2 Replies)
Discussion started by: siteregsam
2 Replies

6. UNIX for Dummies Questions & Answers

mv folders/files without changing modified date?

Hi all, I'm using Red Hat Linux and want to move some folders and files around but not change the modified date. Is this possible? I know cp has a -p flag which seems to do what I want, but this is a large volume of data so copying and deleting would not be feasible. (13 Replies)
Discussion started by: Annorax
13 Replies

7. UNIX for Dummies Questions & Answers

adding or subtracting days in the o/p of date

how can we add or subtract days from the output of date command in unix... like if i want to subtract a day from the result of date command like this.. v_date=`date +%Y%m%d` this wud give me 20080519 now i want to subtract one day from this.. so tht it wud give me 20080518.. how do i do... (1 Reply)
Discussion started by: St.Fartatric
1 Replies

8. UNIX for Dummies Questions & Answers

Changing Creation Date to a Prespecified Date of a File In Unix

Dear Expert, Is there a command to do that in Unix? In such a way that we don't need to actually "write" or modified the content. -- monkfan (4 Replies)
Discussion started by: monkfan
4 Replies

9. Shell Programming and Scripting

Subtracting date / timestamps

I have looked through the forums and found many date / time manipulation tools, but cannot seem to find something that fits my needs for the following. I have a log file with date time stamps like this: Jun 21 17:21:52 Jun 21 17:24:56 Jun 21 17:27:59 Jun 21 17:31:03 Jun 21 17:34:07 Jun... (0 Replies)
Discussion started by: roadcyclist
0 Replies

10. Shell Programming and Scripting

subtracting a days from current date

Hi i am trying to subtract days from current date. For example todays date is 10/03/2006. If i subtract 2 days it should give 8/03/2006. I am also trying to find the access date of a file in dd/mm/yyyy format. Can any one please help in how to do this. Ramesh (1 Reply)
Discussion started by: rameshspal
1 Replies
Login or Register to Ask a Question