Change "SMITH, JOHN" to "John Smith"


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Change "SMITH, JOHN" to "John Smith"
# 1  
Old 01-31-2011
Change "SMITH, JOHN" to "John Smith"

Long File with many lines like the example, Double Quotes are a constant, and would be a good FS for AWK.

Input
Code:
TheWhisperers23Chapter 21    9781442305151    "WHISPERERS"    "CONNOLLY, JOHN" 2010

Desired Output
Code:
TheWhisperers23Chapter 21    9781442305151    "WHISPERERS"    "John Connolly" 2010

---------- Post updated at 12:41 PM ---------- Previous update was at 12:40 PM ----------

Me showing some of my work.. I was able to spearate the name column with:
Code:
awk -vFS='"' '{print $4}' abfile.txt

---------- Post updated at 12:57 PM ---------- Previous update was at 12:41 PM ----------

I need the First name then Last name and For only first letter to be capitalized. Sometimes there will be multiple words for author name like "The Dalai Lama" .. In these instances, do nothing if possible. I need the changes printed to file, or to a new output file.
# 2  
Old 01-31-2011
try this using nawk for Solaris or a modern awk elsewhere:
Code:
nawk '{ $4=tolower($4); print $0}' filename  > tmpfile
mv tmpfile filename

# 3  
Old 01-31-2011
Jim, I need the first letter of first name capitalized and the first letter of last name capitalized, I also need them reversed. You simply made them all lower case.
# 4  
Old 01-31-2011

nawk -f glev.awk myFile


glev.awk:
Code:
BEGIN {
   qq=sprintf("%c", 034)
   tab=sprintf("\t")
   FS=OFS=qq

}
function trim(str)
{
    sub("^([ ]*|" tab "*)", "", str);
    sub("([ ]*|" tab "*)" "$", "", str);
    return str;
}
{
   n=split($4, nameA, ",")
   if (n>2) {print;next}
   sur=toupper(substr(trim(nameA[1]),1,1)) tolower(substr(trim(nameA[1]),2))
   name=toupper(substr(trim(nameA[2]),1,1)) tolower(substr(trim(nameA[2]),2))
   #printf("sur->[%s] name->[%s]\n", sur, name)
   $4 = name ", " sur
}
1

# 5  
Old 01-31-2011
I dont know what is wrong, I simply copied and pasted you solution Vgersh99, but all that happens is strange artifacts appear .. I did sudo chmod +x on the file you wrote, and ran nawk -f yourfile myfile

What could be wrong?

---------- Post updated at 03:55 PM ---------- Previous update was at 03:04 PM ----------

I urgently need help but do not have any bits, please somebody!
# 6  
Old 01-31-2011
I just tried it and it worked fine for me. Don't know what you problem is. Smilie
# 7  
Old 01-31-2011
Quote:
Originally Posted by glev2005
I dont know what is wrong, I simply copied and pasted you solution Vgersh99, but all that happens is strange artifacts appear .. I did sudo chmod +x on the file you wrote, and ran nawk -f yourfile myfile

What could be wrong?

---------- Post updated at 03:55 PM ---------- Previous update was at 03:04 PM ----------

I urgently need help but do not have any bits, please somebody!
Please copy/paste your sample data file that produces 'strange artifacts' given the posted script.
What OS are you on?
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