Perl Code to change file delimiter (passed as argument) to bar delimiter


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Perl Code to change file delimiter (passed as argument) to bar delimiter
# 1  
Old 01-03-2014
Perl Code to change file delimiter (passed as argument) to bar delimiter

Hi,

Extremely new to Perl scripting, but need a quick fix without using TEXT::CSV

I need to read in a file, pass any delimiter as an argument, and convert it to bar delimited on the output. In addition, enclose fields within double quotes in case of any embedded delimiters.

Any help would be greatly appreciated, thanks
# 2  
Old 01-04-2014
Here's a recipe from Perl cookbook (the sub routine parse_csv can be found in it):

Code:
#! /usr/bin/perl
use warnings;
use strict;

my $d = $ARGV[0];

sub parse_csv {
  my $text = shift;
  my @columns = ();
  push(@columns ,$+) while $text =~ m{
    "([^\"\\]*(?:\\.[^\"\\]*)*)",?
      | ([^,]+),?
      | ,
    }gx;
  push(@columns ,undef) if substr($text, -1,1) eq ',';
  return @columns;
}

my @cols = ();
my $line = undef;

open I, "< file.txt";
while ($line = <I>) {
    chomp($line);
    @cols = parse_csv($line);
    print join($d, @cols), "\n";
}
close I;

Code:
[user@host ~]$ cat file.txt
a,b,c,"d,e,f",g,h
a,b,c,"d,e,f",g,h
a,b,c,"d,e,f",g,h
[user@host ~]$ ./test.pl '|'
a|b|c|d,e,f|g|h
a|b|c|d,e,f|g|h
a|b|c|d,e,f|g|h
[user@host ~]$

This User Gave Thanks to balajesuri For This Post:
# 3  
Old 01-05-2014
Thanks, I will check it out!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Change delimiter is not working using awk

I have file 2.txt and I want to change the delimiter form , to : Not sure what is the problem with below command cat 2.txt 1,a 2,b 3,d awk 'BEGIN {FS=",";OFS=":";} {print $0}' 2.txt Please use CODE tags as required by forum rules! (11 Replies)
Discussion started by: vamsi.valiveti
11 Replies

2. Shell Programming and Scripting

Shell script to put delimiter for a no delimiter variable length text file

Hi, I have a No Delimiter variable length text file with following schema - Column Name Data length Firstname 5 Lastname 5 age 3 phoneno1 10 phoneno2 10 phoneno3 10 sample data - ... (16 Replies)
Discussion started by: Gaurav Martha
16 Replies

3. Shell Programming and Scripting

To change the delimiter for first two columns

Dear Friends, I have file as below 1|sdf|rere|sert|trt|rtr i want to change the delimeter first three columns two fields expected output 1~sdf~rere|sert|trt|rtr Plz help (2 Replies)
Discussion started by: i150371485
2 Replies

4. Shell Programming and Scripting

How to cut by delimiter, and delimiter can be anything except numbers?

Hi all, I have a number of strings like below: //mnt/autocor/4313'(33")W/ and i'm trying to get the numbers in this string, for example 431333 please help thanks ahead (14 Replies)
Discussion started by: sunnydanniel
14 Replies

5. UNIX for Dummies Questions & Answers

How to change delimiter in my file ?

Hi I have a file in which delimiter is ';' However if the delimiter is within "" it is a part of the string and not delimiter. How to get the fields ? I want to replace the delimiter ';' to '|'. The file contains data like this : 11111; 2222 2222; 3333; 3333; 4444 ""44444 The file... (2 Replies)
Discussion started by: dashing201
2 Replies

6. Shell Programming and Scripting

Substring based on delimiter, finding last delimiter

Hi, I have a string like ABC.123.XYZ-A1-B2-P1-C4. I want to delimit the string based on "-" and then get result as only two strings. One with string till last hyphen and other with value after last hyphen... For this case, it would be something like first string as "ABC.123.XYZ-A1-B2-P1" and... (6 Replies)
Discussion started by: gupt_ash
6 Replies

7. Shell Programming and Scripting

AWK how to change delimiter while outputting

Hello I need some help in outputting Fields when the delimiter has changed: echo "test1,test2 | test3,test4,test5" | awk -F"," '{print $1,"COUNT",$2,$4}' prints out: test1 COUNT test2 | test3 test5 But how to change the -F"," to -F"|" delimiter, so that it separates the fields from $2... (2 Replies)
Discussion started by: sdohn
2 Replies

8. Shell Programming and Scripting

how to differentiate columns of a file in perl with no specific delimiter

Hi everybody, This time I am having one issue in perl. I have to create comma separated file using the following type of information. The problem is the columns do not have any specific delimiter. So while using split I am getting different value. Some where it is space(S) and some where it is... (9 Replies)
Discussion started by: Amiya Rath
9 Replies

9. Shell Programming and Scripting

replace space with delimiter in whole file -perl

Hi I have a file which have say about 100,000 records.. the records in it look like Some kind of text 1234567891 abcd February 14, 2008 03:58:54 AM lmnop This is how it looks.. if u notice there is a 2byte space between each column.. and im planning to replace that with '|' .. ... (11 Replies)
Discussion started by: meghana
11 Replies

10. Shell Programming and Scripting

Pivot variable record length file and change delimiter

Hi experts. I got a file (500mb max) and need to pivot it (loading into ORCL) and change BLANK delimiter to PIPE |. Sometimes there are multipel BLANKS (as a particular value may be BLANK, or simply two BLANKS instead of one BLANK). thanks for your input! Cheers, Layout... (3 Replies)
Discussion started by: thomasr
3 Replies
Login or Register to Ask a Question

Featured Tech Videos