How to cut a pipe delimited file and paste it with another file to form a comma separated outputfile


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to cut a pipe delimited file and paste it with another file to form a comma separated outputfile
# 8  
Old 10-05-2014
Quote:
Originally Posted by etldev
another thing I forgot to mention is I dont know pre hand how many fields exist in the file meaning A2.txt can have 0-n number of fields ..The file A2.txt might have any number of variable fields.
You also have forgotten to tell us what OS you're using. The awk script I suggested will properly handle any number of fields on a line as long as the length of longest line in the output file is no longer than LINE_MAX (typically 2048) bytes. Most of the sed scripts you have been shown in this thread will properly handle files with one or more (but not zero) fields with the same line length limits. Some OSs will be OK with longer lines; others will generate a diagnostic message if a long line is encountered; and, unfortunately, a few others will silently corrupt your data.

If the line length is a problem for your data on your system, we can play games with the awk record separator (instead of field separator) to get around the issue.

So, what is the maximum line length in your input data and how many fields can you have in your output files? (Output line length will be (input line length) + 2 * (number of input fields).)

What is the value of LINE_MAX on your system (output from getconf LINE_MAX)?

What OS are you using (output from uname -a)?
# 9  
Old 10-05-2014
Hey Don

Much thanks for looking into this.I am using AIX 7.2.I dont think length of line is a problem and is very well within limits.I tried the AWk you suggested and I got an error.

A.txt is my pipe delim input file

Code:
cut -d "|" -f 1,2,3,4,5 A.txt > A1.txt 
cut -d "|" -f 6- A.txt > A2.txt

A3.txt is an external pipe delim file
Code:
paste -d "|" A2.txt A3.txt>>A4.txt

A5.txt would be my comma delim output

Code:
awk -F'|' -v OFS='","' 'NF{$1 = $1; $0 = "\"" $0 "\""}1'A4.txt >> A5.txt
 syntax error The source line is 1.
 The error context is
                NF{$1 = $1; $0 = "\"" $0 >>>  "\""}1A4. <<< txt
 awk: Quitting
 The source line is 1.

---------- Post updated at 03:51 AM ---------- Previous update was at 03:42 AM ----------

here is URL for sample of how my input delim file A.txt looks like

http://s24.postimg.org/d8afdzcsl/example.jpg

Last edited by Don Cragun; 10-05-2014 at 07:12 AM.. Reason: Fix CODE tags.
# 10  
Old 10-05-2014
What if any one of the fields already is double quoted?
Code:
cat file
A|B|C|D
A|B|C|D
A|"B"|C|"D"
A|B|C|D
awk -F'|' -v OFS='","' 'NF{$1 = $1; $0 = "\"" $0 "\""}1' file
"A","B","C","D"
"A","B","C","D"
"A",""B"","C",""D""
"A","B","C","D"

# 11  
Old 10-05-2014
Quote:
Originally Posted by etldev
Hey Don

Much thanks for looking into this.I am using AIX 7.2.I dont think length of line is a problem and is very well within limits.I tried the AWk you suggested and I got an error.

A.txt is my pipe delim input file

Code:
cut -d "|" -f 1,2,3,4,5 A.txt > A1.txt 
cut -d "|" -f 6- A.txt > A2.txt

A3.txt is an external pipe delim file
Code:
paste -d "|" A2.txt A3.txt>>A4.txt

A5.txt would be my comma delim output

Code:
awk -F'|' -v OFS='","' 'NF{$1 = $1; $0 = "\"" $0 "\""}1'A4.txt >> A5.txt
 syntax error The source line is 1.
 The error context is
                NF{$1 = $1; $0 = "\"" $0 >>>  "\""}1A4. <<< txt
 awk: Quitting
 The source line is 1.

---------- Post updated at 03:51 AM ---------- Previous update was at 03:42 AM ----------

here is URL for sample of how my input delim file A.txt looks like

http://s24.postimg.org/d8afdzcsl/example.jpg
etldev,
There has to be a space between the ' terminating the awk script and the filename being given to awk as an input file:
Code:
awk -F'|' -v OFS='","' 'NF{$1 = $1; $0 = "\"" $0 "\""}1' A4.txt >> A5.txt

RudiC,
The sample input shown in the link provided in post #9 in this thread contains no quotes of any kind (and no commas, either). With the sample data provided (which did not include any empty lines either), the following would be sufficient:
Code:
awk -F'|' -v OFS='","' '{$1 = $1}1' A4.txt >> A5.txt

But I assume that other input files will contain commas. If other input contains any double quote characters, adjustments will be needed and we'll need to know if the double quotes that are present are intended to be literal characters or are quoting other characters in the input. If any of them are intended to be literal double quote characters, we'll also need to know the quoting conventions used by the application that is going to read the CSV file this script is producing.

etldev,
In your sample code you are appending to files A4.txt and A5.txt rather than replacing whatever may have been in those files before. Is that intentional, or did you mean to use > instead of >> in both of those places?
# 12  
Old 10-05-2014
neither of these above AWK codes are giving me desired output as I could still see PIPES as field delims but not commas...

however the awk code which takes care of quotes and comas is just putting commas at the beggining and at the end of the line.

Don

to your point there are no commas within the data now in the input files but there may be situations we might and in those situations the pipes and commas in data have to be selectively converted so that when the ouput is opened in sprdsheet all the data looks intact without any quotes around them (preferrably)
# 13  
Old 10-05-2014
What OS are you using?

I repeat: Why are you using >> A5.txt instead of > A5.txt???

Please put the data you showed us in the JPEG file you posted in a file named A4.txt and run the command:
Code:
awk -F'|' -v OFS='","' 'NF{$1 = $1; $0 = "\"" $0 "\""}1' A4.txt > A5.txt

or, as long as there are no commas in A4.txt, the command:
Code:
awk -F'|' -v OFS=',' '{$1 = $1}1' A4.txt > A5.txt

and then show us the contents of the file A5.txt and any diagnostics produced by the awk command.

Posting a JPEG file doesn't really help with this problem. We need text that we can feed into awk, not pixels that are unintelligible to the UNIX and Linux system text processing utilities.
# 14  
Old 10-05-2014
I have attched the input A4.txt .

When I run the big awk commnd the one which takes care of quotes my output is A5.txt-which is attached but when I run the other awk my output is same as A4.txt
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Linux convert Comma delimited file to pipe

I have file in linux with comma delimited and string fields in double quotations ", I need to convert them to pipe delimiter please share your inputs. Example: Input: "2017-09-30","ACBD,TVF","01234",NULL,18,NULL,"686091802","BANK OF ABCD, LIMITED, THE",790456 Output: ... (4 Replies)
Discussion started by: shieksir
4 Replies

2. UNIX for Dummies Questions & Answers

Need to convert a pipe delimited text file to tab delimited

Hi, I have a rquirement in unix as below . I have a text file with me seperated by | symbol and i need to generate a excel file through unix commands/script so that each value will go to each column. ex: Input Text file: 1|A|apple 2|B|bottle excel file to be generated as output as... (9 Replies)
Discussion started by: raja kakitapall
9 Replies

3. 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

4. Shell Programming and Scripting

Help with converting Pipe delimited file to Tab Delimited

I have a file which was pipe delimited, I need to make it tab delimited. I tried with sed but no use cat file | sed 's/|//t/g' The above command substituted "/t" not tab in the place of pipe. Sample file: abc|123|2012-01-30|2012-04-28|xyz have to convert to: abc 123... (6 Replies)
Discussion started by: karumudi7
6 Replies

5. Shell Programming and Scripting

How to convert a space delimited file into a pipe delimited file using shellscript?

Hi All, I have space delimited file similar to the one as shown below.. I need to convert it as a pipe delimited, the values inside the pipe delimited file should be as highlighted... AA ATIU2345098809 009697 005374 BB ATIU2345097809 005445 006518 CC ATIU9685098809 003215 003571 DD... (7 Replies)
Discussion started by: nithins007
7 Replies

6. Shell Programming and Scripting

How to format file into comma separated text file?

Hi Guys, I have text file which is tab/space separated but I want it to re-format into a comma separated and trim the spaces in between. Can someone spare me a perl or sed script that can do the job? INPUT FILE: 500010245623 500 21-APR-11 05.58.21 PM ... (14 Replies)
Discussion started by: pinpe
14 Replies

7. Shell Programming and Scripting

Converting comma separated to pipe delimited file

Hi, I came across a very good script to convert a comma seperated to pipe delimited file in this forum. the script serves most of the requirement but looks like it does not handle embedded double quotes and commas i.e if the input is like 1234, "value","first,second", "LDC5"monitor",... (15 Replies)
Discussion started by: anijan
15 Replies

8. Shell Programming and Scripting

Cut and paste data in matrix form

I have large formatted data file with five columns. This has to be rearranged in lower order matrix form as shown below for sample data. 1 2 3 4 5 1.0 3.0 2.0 5.0 3.0 2.0 4.0 3.0 1.0 6.0 2.0 3.0 4.0 5.0 1.0 1.0 4.0 2.0 3.0 5.0 3.0 5.0 4.0 2.0 8.0 1.0 3.0 2.0 4.0 5.0 2.0... (7 Replies)
Discussion started by: dhilipumich
7 Replies

9. Shell Programming and Scripting

convert a pipe delimited file to a':" delimited file

i have a file whose data is like this:: osr_pe_assign|-120|wg000d@att.com|4| osr_evt|-21|wg000d@att.com|4| pe_avail|-21|wg000d@att.com|4| osr_svt|-11|wg000d@att.com|4| pe_mop|-13|wg000d@att.com|4| instar_ready|-35|wg000d@att.com|4| nsdnet_ready|-90|wg000d@att.com|4|... (6 Replies)
Discussion started by: priyanka3006
6 Replies

10. Shell Programming and Scripting

Converting Tab delimited file to Comma delimited file in Unix

Hi, Can anyone let me know on how to convert a Tab delimited file to Comma delimited file in Unix Thanks!! (22 Replies)
Discussion started by: charan81
22 Replies
Login or Register to Ask a Question