Replace "," with ":" except...


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Replace "," with ":" except...
# 1  
Old 05-09-2013
Replace "," with ":" except...

Hi,

My input file looks like below:

Code:
XXXXXXXXX,XXXXXXXXX,MARR,"EDWIN, III",BCCT,I,XGC0125M20091,XXXXXX,20110201,,M,MARR,EDWIN,19780312,039528630,1,
XXXXXXXXX,XXXXXXXXX,MARR,"EDWIN, III",EXPWL,I,0125M20091,WL7A,20110201,,R,MARR,EDWIN,19780312,039528630,1,1

I want to replace every occurence of "," to ":" to make it ":" delimited file, except when "," is a part of the name like "EDWIN, III". Here if I replace "," with ":", they will be treated as two different column, which I do not want to happen. I will be passing this file to awk script later.

I tried:
sed '/"[A-Z ]*,[A-Z ]*"/!s/,/:/g' input > output

But it simply ingnored these two lines and replace "," with ":" in all other lines.

Any idea how this can be done? I assume here that such name should be enclosed in " and " only.

regards,
juzz4fun

Last edited by Scrutinizer; 05-09-2013 at 05:31 PM.. Reason: changed icode to code tags
# 2  
Old 05-09-2013
Try:
Code:
awk 'NR%2{gsub(/,/,":")}1' RS=\" ORS=\" file

or
Code:
awk '{for (i=1; i<=NF; i+=2) gsub(/,/,":",$i)}1' FS=\" OFS=\" file

# 3  
Old 05-09-2013
Scrutinizer, sorry but I do not understand your solution.
FYI .. the input file contains few thousand records, not all records have this situation where "," appears in the last name of the person. In short, most of the rows have 17 columns while few (as shown) records have more than 17 columns. Sorry for not making it clear in my original post Smilie
# 4  
Old 05-09-2013
In that case try the 2nd suggestion...
# 5  
Old 05-09-2013
Sorry no luck Smilie

Getting below errors:

Code:
awk: syntax error near line 1
awk: illegal statement near line 1
awk: syntax error near line 1
awk: bailing out near line 1

If possible, could you please explain me the logic behind the script?

Last edited by Scrutinizer; 05-09-2013 at 06:05 PM.. Reason: icode tags to code tags
# 6  
Old 05-09-2013
On Solaris use /usr/xpg4/bin/awk rather than awk

--
The script works by using the double quote as both input and output field separator.
  • If there are no fields with double quotes, then the number of fields equals 1 so the loop is only executed once, and all commas get replaced with semicolons
  • If a line is empty then the number of fields is zero and no replacement takes place
  • If there are fields with double quotes, then the odd fields are outside the double quotes and those are the ones that need their commas replaced with semicolons, the other fields (inside the doube quotes, need to remain untouched)
1 means print the record..

Last edited by Scrutinizer; 05-09-2013 at 06:11 PM..
This User Gave Thanks to Scrutinizer For This Post:
# 7  
Old 05-09-2013
Amazing. This worked. Smilie
You are something !! Thanks.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. AIX

Apache 2.4 directory cannot display "Last modified" "Size" "Description"

Hi 2 all, i have had AIX 7.2 :/# /usr/IBMAHS/bin/apachectl -v Server version: Apache/2.4.12 (Unix) Server built: May 25 2015 04:58:27 :/#:/# /usr/IBMAHS/bin/apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_worker_module (static) ... (3 Replies)
Discussion started by: penchev
3 Replies

2. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

3. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

4. Solaris

The slices "usr", "opt", "tmp" disappeared!!! Help please.

The system don't boot. on the screen appears following: press enter to maintenance (or type CTRL-D to continue)...I checked with format command. ... the slices "0-root","1-swap","2-backup" exist. ...the slises "3-var","6-usr" -unassigned. :( (16 Replies)
Discussion started by: wolfgang
16 Replies

5. Shell Programming and Scripting

how to use "cut" or "awk" or "sed" to remove a string

logs: "/home/abc/public_html/index.php" "/home/abc/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" how to use "cut" or "awk" or "sed" to get the following result: abc abc xyz xyz xyz (8 Replies)
Discussion started by: timmywong
8 Replies

6. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

7. Shell Programming and Scripting

ps -ef | grep "string1" "string2" " "string3"

Hi all, can any one suggest me the script to grep multiple strings from ps -ef pls correct the below script . its not working/ i want to print OK if all the below process are running in my solaris system. else i want to print NOT OK. bash-3.00$ ps -ef | grep blu lscpusr 48 42 ... (11 Replies)
Discussion started by: steve2216
11 Replies

8. Shell Programming and Scripting

cat $como_file | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g'

hi All, cat file_name | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g' Can this be done by using sed or awk alone (4 Replies)
Discussion started by: harshakusam
4 Replies

9. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies
Login or Register to Ask a Question