Change "SMITH, JOHN" to "John Smith"


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Change "SMITH, JOHN" to "John Smith"
# 8  
Old 01-31-2011
Perhaps this migh avoid the artifacts:

Code:
nawk '
function oneup(str)
{
    sub("^[ \t]*", "", str);
    sub("[ \t]*$", "", str);
    return toupper(substr(str,1,1)) tolower(substr(str,2));
}
{
   if (split($4, name, ",") < 3)
       $4 = oneup(name[1]) " " oneup(name[2])
}
1' FS=\" OFS=\" myFile

# 9  
Old 01-31-2011
Code:
awk 'BEGIN{FS=OFS="\""}
function oneup(str) {return toupper(substr(str,1,1)) tolower(substr(str,2))}
{split($4,a,"[, ]");$4=oneup(a[3]) " " oneup(a[1])}1' infile

# 10  
Old 01-31-2011
Nice rdcwayx didn't think to use space in the split command to, will this work with nawk under solaris, or is it a GNU thing?

Think it might be GNU 'cause it failes with awk on AIX.
# 11  
Old 01-31-2011
Test my code in Solaris (nawk) and Aix (/usr/bin/awk), both are fine.

If your system don't support "[, ]" in split, you can remove the space first by:

Code:
gsub(/ /,"",$4)

# 12  
Old 01-31-2011
Dont worry found the issue, I had extra test cases in my datafile, with 0,1 or 2 tabs/spaces after the comma and these caused the issue. If datafile sticks to 1 space after the comma all is good.
# 13  
Old 02-01-2011
Code:
 $ ruby -F"\"" -ane '$F[3]=~/(.*?)[, ]+(.*?)$/;$F[3]="#{$2.downcase.capitalize} #{$1.downcase.capitalize}";print $F.join("\"")' file

# 14  
Old 02-01-2011
Code:
 echo "TheWhisperers23Chapter 21    9781442305151    \"WHISPERERS\"    \"CONNOLLY, JOHN\" 2010" |sed 's/\(.*"\)\(.*\), \(.*\)\(".*\)/\1\L\3 "\u\3 \L\2 \u\2\4/' |awk '{$5=$7="";print $0}'
TheWhisperers23Chapter 21 9781442305151 "WHISPERERS"  "John  Connolly" 2010

This User Gave Thanks to yinyuemi For This Post:
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. Shell Programming and Scripting

Find lines with "A" then change "E" to "X" same line

I have a bunch of random character lines like ABCEDFG. I want to find all lines with "A" and then change any "E" to "X" in the same line. ALL lines with "A" will have an "X" somewhere in it. I have tried sed awk and vi editor. I get close, not quite there. I know someone has already solved this... (10 Replies)
Discussion started by: nightwatchrenba
10 Replies

5. Shell Programming and Scripting

Awk,sed : change every 2nd field ":" to "|"

Hi Experts, I have a string with colon delimited, want 2nd colon to be changed to a pipe. data: 101:8:43:4:72:14:41:69:85:3:137:4:3:0:4:0:9:3:0:3:12:3: I am trying with sed, but can change only 1 occurance: echo "101:8:43:4:72:14:41:69:85:3:137:4:3:0:4:0:9:3:0:3:12:3:" | sed 's/:/|/2'... (5 Replies)
Discussion started by: rveri
5 Replies

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

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

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