Re: upper/lower case

"[email protected] [sed-users]" <[email protected]>
Newsgroups gmane.editors.sed.user
Message-ID <[email protected]>
Here are a couple of minor changes to this script: 

 A. Add a semicolon to the end of the command, rather than let the newline
 act as the command separator. This is handy in case lines become joined,
 then the command logic goes haywire.
 

 > cut -d ";" -f $col_to_sed $input_file > old_col.txt
   cut -d ";" -f $col_to_sed $input_file > old_col.txt ;
 

 B. i)Reformat the 'cut' commands in the order of the columns cut.
     ii) The 1-$prev_col can be simplified to just -$prev_col. 
    iii) Intermediate output filenames are made brace expansion friendly.
    iv) Input to "cut" command is redirected
 

 > cut -d ";" -f $col_to_sed $input_file > old_col.txt
 > cut -d ";" -f 1-$prev_col $input_file > cols_before.txt
> cut -d ";" -f $next_col- $input_file > cols_after.txt

 

 cut -d \;  -f -$prev_col     < $input_file > cols_before.txt

 cut -d \;  -f  $col_to_sed < $input_file > cols_.txt
cut -d \;  -f  $next_col-    < $input_file > cols_after.txt

 

 

 C. The "sed" command is slightly altered to do away with the capturing
 parentheses.
 
>  sed -r "1! {s/(.*)/\L\1/; s/\<(.)/\u\1/g}" < old_col.txt > new_col.txt
 

 sed -e '1b;s/.*/\L&/;s/\<./\u&/g' < cols_.txt > cols_new.txt

 

 

 D. Finally, the "paste" command with the brace expansion:
 

   paste -d\;  cols_{before,new,after}.txt
 

 

 

 
---In [email protected], <dgoldman@...> wrote :

 Thanks for sending the more complete file example. Here is one way to do 
 it, in addition to the other suggestions.
 
 $ cat input.txt
 "id";"lastname";"firstname";"adress";"zip";"town"
 "9515";"CRAIG";"PAUL";"3 Av Marie Curie";"75001";"Paris"
 "355";"BROSNAN";"MARIE ODILE";"43 Rue PASTEUR";"75001";"Paris"
 "85";"CONNERY";"JEAN-CHARLES";"7 Rue LECOURBE";"14256";"Seville"
 "5315125";"MOORE";"JEAN-MARC";"12 Av PASTEUR";"47852";"Rome"
 
 $ cat process.sh
 input_file=$1
 col_to_sed=$2
 
 prev_col=`expr $col_to_sed - 1`
 next_col=`expr $col_to_sed + 1`
 
 cut -d ";" -f $col_to_sed $input_file > old_col.txt
 cut -d ";" -f 1-$prev_col $input_file > cols_before.txt
 cut -d ";" -f $next_col- $input_file > cols_after.txt
 
 sed -r "1! {s/(.*)/\L\1/; s/\<(.)/\u\1/g}" < old_col.txt > new_col.txt
 
 paste -d ";" cols_before.txt new_col.txt cols_after.txt
 
 $ ./process.sh input.txt 3
 "id";"lastname";"firstname";"adress";"zip";"town"
 "9515";"CRAIG";"Paul";"3 Av Marie Curie";"75001";"Paris"
 "355";"BROSNAN";"Marie Odile";"43 Rue PASTEUR";"75001";"Paris"
 "85";"CONNERY";"Jean-Charles";"7 Rue LECOURBE";"14256";"Seville"
 "5315125";"MOORE";"Jean-Marc";"12 Av PASTEUR";"47852";"Rome"
 
 On the negative side, the shell script might need to be modified if you 
 have cases where col_to_sed is the first or last column, so the script 
 would end up more complicated.
 
 On the positive side, it works, and (at least to me!) seems simple 
 enough to understand and maintain.
 
 Daniel
 
 On 12/11/2015 12:34 AM, MOKRANI Rachid [sed-users] wrote:
 > Hi,
 >
 > Thanks, but this solution (without -i) show me the result and don't write/save the file.
 >
 > This is a file exemple. the original file has many more rows and columns
 >
 > "id";"lastname";"firstname";"adress";"zip";"town"
 > "9515";"CRAIG";"PAUL";"3 Av Marie Curie";"75001";"Paris"
 > "355";"BROSNAN";"MARIE ODILE";"43 Rue PASTEUR";"75001";"Paris"
 > "85";"CONNERY";"JEAN-CHARLES";"7 Rue LECOURBE";"14256";"Seville"
 > "5315125";"MOORE";"JEAN-MARC";"12 Av PASTEUR";"47852";"Rome"
 >
 >
 > in my example I would apply the results of sed (sed -i -r "s/(.*)/\L\1/; s/\<(.)/\u\1/g" ) only in column 3 (title firstname) .
 >
 > "id";"lastname";"firstname";"adress";"ZIP";"TOWN"
 > "9515";"CRAIG";"Paul";"3 Av Marie Curie";"75001";"Paris"
 > "355";"BROSNAN";"Marie Odile";"43 Rue PASTEUR";"75001";"Paris"
 > "85";"CONNERY";"Jean-Charles";"7 Rue LECOURBE";"14256";"Seville"
 > "5315125";"MOORE";"Jean-Marc";"12 Av PASTEUR";"47852";"Rome"
 >
 >
 > Once obtained this result I could apply a sed command on the column of my choice.
 >
 > And for now I just can't do it. :-(
 > 

  

  


[Non-text portions of this message have been removed]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.