String Operations

Hi All,

Query 1 :
I want to know how we can get a count of multipe occurrences of a particular expression in another string.

For Eg. If my string is " 12" and i need to count the number of spaces preceeding 12

Query 2 :

Also want to know how we can change the alignment of a string from left justified to right justified in Unix.

For Eg. " 12" want to change it to "12 ".

Is there any command in unix for this. ??

Please try this for u r query2 i.e. left alignment
awk '{printf("%'filelength's\n",$0)}' S_file > D_file

filelength:= No of spaces u need for left alignment
S_file := Source filename
D_file:= Detination filename

for query one

echo " 12" | tr -cd '\040'| fold -1 | wc -l

to align to left

echo " 12" | tr -d '\040'

Hi kenisand ,
Actually my problem is that i have column in a fixed length file that is right alingned. I need to change that column to make it right aligned.

The problem is that the length of the column is 5, and it can hold a max of 5 characters. So i do not know the number of spaces that are preceding a valid character.
For Eg : Records in the file are as follows :
Cl1 Cl2 Cl3
Rec 1 :ABC 3DEF
Rec 2 :EFG 34HIJ

In the above file, has 3 cols
first record is : Col1 "ABC", Col2:" 3" and col3:"DEF"
second record :Col1 "EFG", Col2:" 34" and col3:"HIJ"

Now my requirement is to change the right alignement of the 2 nd col in the file to left alignement.

I want the output to be as follows :
Cl1 Cl2 Cl3
Rec 1 :ABC3 DEF
Rec 2 :EFG34 HIJ

If i can find the number of spaces preceding the valid character then i can use the solution u hav suggested, but this count can be variable and that is the problem.

Under man ksh look into typeset features. It might be of some help.

Hey Raom,

Thanks a lot for that answer to my Query 1. That is exactly what i was looking for..

-Regards
Rohini

Nice , anyway u can also use:

echo " 12" | tr -cd ' '|awk '{print length}'

Cheers

In ksh:

$
$ x="     12"
$ xspace=${x%%+([! ])}
$ typeset -R6 rightx=$x
$ typeset -L6 leftx=$x
$ echo number of leading blanks is ${#xspace}
number of leading blanks is 5
$ echo "rightx=<${rightx}>   leftx=<${leftx}>"
rightx=<    12>   leftx=<12    >
$

What does the below line do?
xspace=${x%%+([! ])}
It seems to be retaining only spaces. How to interpret it?

Thanks,
Ranjith

You should read "man ksh", it's all in there...but briefly: ${var%%pattern} removes the largest string that matches the pattern from the end of the value of the variable. And +([! ]) is a pattern that matches non-blanks.