Sponsored Content
Top Forums UNIX for Beginners Questions & Answers Replace a field in a comma separated file Post 303044848 by H squared on Thursday 5th of March 2020 08:34:25 AM
Old 03-05-2020
Replace a field in a comma separated file

Hello Experts,

I have a sample comma separated file as having date data in field # 5 and field #8. Field # 4 and 7 (fields before the date field) are indicators:

This is just a sample data, the actual file may have n number of date fields.

Code:
29,A Store,A Street,1,111213,aaaa,0,891213
30,B Store,B Street,0,991213,aaaa,1,61213
31,C Store,C Street,1,51213,aaaaa,1,81213
32,D Store,D Street,0,0,aaaa,1,150323
33,E Store,E Street,1,121212,bbbb,0,0
34,F Store,F Street,1,101212,cccc,0,971212


I need to update field #5 (depending on the value in field # 4 (indicator field)) and field #8 (depending on the value in field#7) and so on as :

1. If field # 4 = 0 and field # 5 <> 0 (say data is : 991213), then append '19' to the string in field # 5 and make the final value
as : 1999-12-13. This is for years before 2000

2. If field # 4 = 0 and field # 5 = 0 (say data is : 0), then the final value as : 0001-01-01

3. If field # 4 = 1, then
a. check if field # 5 has length = 5, then (for data say: 51213), append '200' so that the final value should be 2011-12-13
b. Else, (for data say : 111213), append '20' so that the final value appears as : 2011-12-13.

Input parameters to the script :
$1 : file name
$2 , $3, ........ this depends on the number of date fields which need to be transformed.

I have written the following code:

Code:
#! /usr/bin/ksh

# Read File name
INPUT=$1

 while IFS=',' read -r f1 f2 f3 f4 f5 f6 f7 f8
 do 
 For Century = 0
  if [ $f4 -eq 0 -a $f5 -ne 0 ]
  then
      echo "19$f5" | sed 's/./&-/4;s/./&-/7' ;
  fi

 For 0 in date
  if [ $f4 -eq 0 -a $f5 -ne 0 ]
  then
      echo "00010101" | sed 's/./&-/4;s/./&-/7' ;
  fi

 for century = 1
  if [ $f4 -eq 1 ]
  then
      char_len=`expr length $f5`
      if [ $char_len -eq 5 ]
      then
         echo "200$f5" | sed 's/./&-/4;s/./&-/7';
      else
          echo "20$f5" | sed 's/./&-/4;s/./&-/7';
      fi
  fi

 done < "$INPUT"

I am able to transform the data for Field # 5 only.
Could you please suggest a better approach for this requirement such that I am able to transform the data for field # 8 as well.


Thank you
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Its PERL + Comma separated seventh field

Hi Friends, I'm working on a perl script, which seems to be simpler. But I'm very new to PERL scripting. I have a comma separated data file, from which I need to extract only the seventh field data out of available twenty fields to an array using perl. Any help would be much appreciated. ... (17 Replies)
Discussion started by: ganapati
17 Replies

2. Shell Programming and Scripting

Replace comma by space for specified field in record

Hi, i want to replace comma by space for specified field in record, i mean i want to replace the commas in the 4th field by space. and rest all is same throught the record. the record is 16458,99,001,"RIMOUSKI, QC",418,"N",7,EST,EDT,902 16458,99,002,"CHANDLER,... (5 Replies)
Discussion started by: raghavendra.cse
5 Replies

3. Shell Programming and Scripting

How to format file into comma separated field

Guys, Need you help, i have a a file content that look like this. Nokia 3330 <spaces><spaces><more spaces>+76451883874 Nokia 3610 +87467361615 so on and so forth, - there are so many spaces in between. - e.g.... (5 Replies)
Discussion started by: shtobias
5 Replies

4. Shell Programming and Scripting

Inserting string in between field in comma separated file

Hello Mates, I have one txt file having commo seperated values. I have to insert string "FALSE" in 2nd field from the end. E.G SE18 6RN,,,,5439070,1786840,,1000002148671600,123434 Out put should be: SE18 6RN,,,,5439070,1786840,FALSE,1000002148671600,123434 Can some one help me to... (8 Replies)
Discussion started by: krsnadasa
8 Replies

5. Shell Programming and Scripting

Comma separated file

Hi all, I have the following files types: FileA: 100, 23, 33, FileB: 22, 45, 78, and i want to make File C: 100,22 23,45 33,78 any nice suggestions for making it easy. (3 Replies)
Discussion started by: hen1610
3 Replies

6. Shell Programming and Scripting

Need Help - comma inside double quote in comma separated csv,

Hello there, I have a comma separated csv , and all the text field is wrapped by double quote. Issue is some text field contain comma as well inside double quote. so it is difficult to process. Input in the csv file is , 1,234,"abc,12,gh","GH234TY",34 I need output like below,... (8 Replies)
Discussion started by: Uttam Maji
8 Replies

7. Shell Programming and Scripting

How to split the comma separated file?

Hi, I have a filein unix like ABC,CDE BCD,KHL and the output i need is like column1 column2 ABC,CDE ABC ABC,CDE CDE BCD,KHL BCD BCD,KHL KHL. Can some body help me out? Hi, The code is working fine. But in my file each row does not have always 1 comma. It may... (6 Replies)
Discussion started by: jagdishrout
6 Replies

8. UNIX for Dummies Questions & Answers

[solved] Comma separated values to space separated

Hi, I have a large number of files which are written as csv (comma-separated values). Does anyone know of simple sed/awk command do achieve this? Thanks! ---------- Post updated at 10:59 AM ---------- Previous update was at 10:54 AM ---------- Guess I asked this too soon. Found the... (0 Replies)
Discussion started by: lost.identity
0 Replies

9. Shell Programming and Scripting

Comma separated to rows based on field

Hi to all, I have a file like: chr1 a1 a2 a3 a4 a5 a6,a7,a8,a9 chr1 b1 b2 b3 b4 b5 b6,b7 chr2 c1 c2 c3 c4 c5 c6,c7,c8,c9,c10 ... I would like an output like this: chr1 a6 chr1 a7 chr1 a8 chr1 a9 chr1 b6 chr1 b7 chr2 c6 chr2 c7 chr2 c8 (6 Replies)
Discussion started by: aec
6 Replies

10. Shell Programming and Scripting

awk to parse comma separated field and removing comma in between number and double quotes

Hi Experts, Please support I have below data in file in comma seperated, but 4th column is containing comma in between numbers, bcz of which when i tried to parse the file the column 6th value(5049641141) is being removed from the file and value(222.82) in column 5 becoming value of column6. ... (3 Replies)
Discussion started by: as7951
3 Replies
srec_emon52(5)							File Formats Manual						    srec_emon52(5)

NAME
srec_emon52 - Elektor Monitor (EMON52) file format DESCRIPTION
This format is used by the monitor EMON52, developed by the European electronics magazine Elektor (Elektuur in Holland). Elektor wouldn't be Elektor if they didn't try to reinvent the wheel. It's a mystery why they didn't use an existing format for the project. Only the Elektor Assembler will produce this file format, reducing the choice of development tools dramatically. Records All data lines are called records, and each record contains the following four fields: +---+------+---+-----------+------+ |cc | aaaa | : | dd ... dd | ssss | The field are defined as follows: +---+------+---+-----------+------+ cc The byte count. A two digit hex value (1 byte), counting the actual data bytes in the record. The byte count is separated from the next field by a space. aaaa The address field. A four hex digit (2 byte) number representing the first address to be used by this record. : The address field and the data field are separated by a colon. dd The actual data of this record. There can be 1 to 255 data bytes per record (see cc) All bytes in the record are separated from each other (and the checksum) by a space. ssss Data Checksum, adding all bytes of the data line together, forming a 16 bit checksum. Covers only all the data bytes of this record. Please note that there is no End Of File record defined. Byte Count The byte count cc counts the actual data bytes in the current record. Usually records have 16 data bytes. I don't know what the maximum number of data bytes is. It depends on the size of the data buffer in the EMON52. Address Field This is the address where the first data byte of the record should be stored. After storing that data byte, the address is incremented by 1 to point to the address for the next data byte of the record. And so on, until all data bytes are stored. The address is represented by a 4 digit hex number (2 bytes), with the MSD first. Data Field The payload of the record is formed by the Data field. The number of data bytes expected is given by the Byte Count field. Checksum The checksum is a 16 bit result from adding all data bytes of the record together. Size Multiplier In general, binary data will expand in sized by approximately 3.8 times when represented with this format. EXAMPLE
Here is an example of an EMON52 file: 10 0000:57 6F 77 21 20 44 69 64 20 79 6F 75 20 72 65 61 0564 10 0010:6C 6C 79 20 67 6F 20 74 68 72 6F 75 67 68 20 61 05E9 10 0020:6C 6C 20 74 68 69 73 20 74 72 6F 75 62 6C 65 20 05ED 10 0030:74 6F 20 72 65 61 64 20 74 68 69 73 20 73 74 72 05F0 04 0040:69 6E 67 21 015F SEE ALSO
http://sbprojects.fol.nl/knowledge/fileformats/emon52.htm AUTHOR
This man page was taken from the above Web page. It was written by San Bergmans <sanmail@bigfoot.com> Reference Manual SRecord srec_emon52(5)
All times are GMT -4. The time now is 01:30 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy