Need to recalculate (subtract) before a reformat.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Need to recalculate (subtract) before a reformat.
# 1  
Old 02-05-2018
Need to recalculate (subtract) before a reformat.

We are having to read a number of files from an outside source and have been given a layout that looks like this
Code:
LNPDTO          383        8     DATE  Comment
LNACIN          391       14     S2     Comment
LNDEFI          405       14     S2     Comment
LNYTDI          419       14     S2     Comment
LNYTDD          433       14     S2     Comment
LNRATE          447        8     S5    Comment
LNRPTR          455        3     N0    Comment

Besides DATE, there is also CHAR and YorN, but those types don't bother me yet. When there is an S (signed numeric) or N (unsigned), I need to subtract the trailing digit from the middle number. The field will be the size they specify but the number of places after the decimal point is subtracted from what is in front of it. Output looks like
Code:
LNPDTO          383  PIC 9(8).
LNACIN          391 PIC S9(12)V9(2).
..........
LNRATE          447   PIC S9(3)V9(5).

In COBOL, the V is an implied decimal point. If the digit after the S or N is zero, there is no V in the PIC clause "PIC 9(3)."

Is there any way to streamline this? We will be getting a number of large layouts in the near future. I can handle it when it doesn't involve a subtraction.

TIA
# 2  
Old 02-05-2018
Confusing specification, many wild guesses!

How about
Code:
awk '
        {TYPE = substr ($4, 1, 1)
         sub (TYPE, "", $4)
         print $1, $2, "PIC " (TYPE~/[SN]/?TYPE:"") "9(" $3-$4 ")" ($4+0!=0?"V9("$4").":".")
        }
' file
LNPDTO 383 PIC 9(8).
LNACIN 391 PIC S9(12)V9(2).
LNDEFI 405 PIC S9(12)V9(2).
LNYTDI 419 PIC S9(12)V9(2).
LNYTDD 433 PIC S9(12)V9(2).
LNRATE 447 PIC S9(3)V9(5).
LNRPTR 455 PIC N9(3).

This User Gave Thanks to RudiC For This Post:
# 3  
Old 02-06-2018
Thank you, that's some material I can learn from and build on.
This User Gave Thanks to wbport 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

Parse and reformat

Trying to parse column C ($3) of the attached file (104 rows). The data is in the below format all in a string. Each string would be a separate row with the data in column A ($1) and column B ($2) being the header. All the data is in seperate columns as well. Thank you :). ACTA 59... (9 Replies)
Discussion started by: cmccabe
9 Replies

2. Shell Programming and Scripting

Subtract two variable

plz help me in simple calculation. Have to substract two variable (in Bytes) and change the output into MB. A=`more /tmp/size_info_old.out |awk NR==3` echo "$A" > /tmp/rav/A.out B=`more /tmp/size_info.out |awk NR==3` echo "$B" > /tmp/B.out C=$(((B-A))/1024/1024) echo "$C"... (2 Replies)
Discussion started by: netdbaind
2 Replies

3. Shell Programming and Scripting

Reformat a file

I have a csv file with 11 columns. The first columns contains the User Id. One User id can have multiple sub Id. The value of Sub Id is in column 10. 100026,captjason@hawaii.rr.com ,jason ,wolford ,1/16/1969, ,US, ,96761 ,15 ,seg_id 100026,captjason@hawaii.rr.com ,jason ,wolford ,1/16/1969,... (3 Replies)
Discussion started by: r_t_1601
3 Replies

4. Shell Programming and Scripting

how to subtract variables

i have var1=abc def var2=abc I want to do var1-var2 ie i want def how can i do it? Thanks please help (1 Reply)
Discussion started by: javaholics
1 Replies

5. Shell Programming and Scripting

Add/Subtract Time

need some help on the below requirement: File1: SV,22,20100501140000,JFK,RUH SV,29,20100501073000,BOM,RUH SV,29,20100501073000,SIN,RUH third filed is datetime which is of the format (yyyymmddhh24miss) File2 JFK,+,0500 BLR,-,0530 SIN,-,0800 for every line of file 1, take 4... (9 Replies)
Discussion started by: ssantoshss
9 Replies

6. Shell Programming and Scripting

Please help me reformat this file

I am working with a file of the form; 4256 7726 1 6525 716 1 7626 0838 1 8726 7623 2 8625 1563 2 1662 2628 3 1551 3552 3 1542 7984 ... (3 Replies)
Discussion started by: digipak
3 Replies

7. UNIX for Advanced & Expert Users

reformat ps output

I often use "ps -ef" command to list all running processes. Now i want to customize the output to show only 2 parts: CMD and UID as below: /bin/bash /usr/bin/run-parts /etc/cron.weekly root /usr/sbin/httpd apache /usr/sbin/httpd apache /usr/sbin/httpd apache I use ps -ef | awk '{print $8"... (3 Replies)
Discussion started by: fongthai
3 Replies

8. UNIX for Dummies Questions & Answers

Date Reformat

Hello, I have a .CSV file with 10+ datetime columns. The way the data is stored in these columns are - 4/4/2006 3:45:30 PM I want the single digits to be left padded with a zero so the above looks like 04/04/2006 03:45:30 PM As the dates and times are different throughout the file... (2 Replies)
Discussion started by: F-1
2 Replies

9. Shell Programming and Scripting

Subtract Time

Hello, Im writing a script using the ksh shell. I have 2 variables in the script: CURRTIME PREVTIME Example, if CURRTIME=13:00, I want to somehow calculate what the time was an hour ago so that PREVTIME=12:00 Right now I have the following: CURRTIME=`date +%H:%M` How can I... (4 Replies)
Discussion started by: xadamz23
4 Replies

10. Shell Programming and Scripting

reformat the file

Hi all, I ran into this problem, hope you can help I have a text file like this: Spriden ID First Name Last Name Term Code Detail Code Amount Trans Date Description ... (3 Replies)
Discussion started by: CamTu
3 Replies
Login or Register to Ask a Question