Filtering leading spaces from text string.

I need a quick fix and am experiencing brain fade so I thought I would offer you nice people a chance at some easy point, It's been a while since I posted a question so I thought it would be fun.

OK here ya go ... shouldnt be too tough.

Nightly we dump logs of our database and filesystem backups to a text "log" file. for one field entry we tail the "fixed" output file from Informix and pipe it through "head -1" to grab just the first line. So far this has worked fine but now I am formatting (mostly cleaning up) the format to be place in a database for query level reporting.

So...we have one line of text in one file, unfortunately this text has LEADING spaces that I would like to eliminate, theres your question.

How do I filter a line that looks something like "     143121 - 143856" into something like "143121 - 143856"   ?

A couple things... first notice that there MAY be additional spaces embedded in the string before and after the "-" these can be left in place or filtered out, I dont care, what I do care about is that the actual text value (Database logical log numbers) stay in tact an accurate. ALSO the solution should be shell independent as we may use C shell on one system and K shell or Bourne shell on others. Thinking maybe AWK or SED or even a GREP statement might do it ???

Current syntax (if it helps) is:
(filename is an example)

LOGS="'tail -3 /testfile.flg | head -1 '"
if  [ -f  "/testfile.log" ]
then
ORIGNUM= 'head -1 "/testfile.log'
ORIGNUM1='expr $ORIGNUM -1'
ORIG=1

then this string gets echoed out to sendmail and to a logfile.
Its a little rough, since you dont have all the varible info but I think you see the drift.

I put the value at 100 cuz I feel like giving away points , sound fair ?

Anyone ?

THANX !!
 






LVL 1
RandybAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
tfewsterConnect With a Mentor Commented:
Hey, it wasn't bad for 2 minutes past midnight, without a Unix box around to prove it on...

(Ooops, I think I've just blown my credibility)

Anyway, it was fun - See you around
Tim
0
 
tfewsterCommented:
If you don't care about other spaces in the string, how about "sed s/ //g"?
- Shell & Unix variant independent (awk isn't...)

Seems a short answer to your detailed spcification, but I think it meets all your requirements.

0
 
tfewsterCommented:
For 100 points, maybe I should have said "specification", not "spcification"

 .
 .
ORIGNUM=`head -1 /testfile.log|sed s/ //g`
 .
 .

Should there really have been a " before the /testfile.log in this line or was that a typo?


0
The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

 
RandybAuthor Commented:
Let me test drive this theory of your real quick
Actually I just figured it out also using sed but my solution has more arguments...I'll post it for you in a sec . If yours works and since its more "condensed" i'll give you the points, if not I will retract the question as my solution does work already.

be right back !
0
 
RandybAuthor Commented:
Let me test drive this theory of your real quick
Actually I just figured it out also using sed but my solution has more arguments...I'll post it for you in a sec . If yours works and since its more "condensed" i'll give you the points, if not I will retract the question as my solution does work already.

be right back !
0
 
tfewsterCommented:
Seems fair, if you'll show me yours...

However, I reckon I thought of the answer before you did (see the timestamps on this Q...!)
0
 
RandybAuthor Commented:
OK OK ...you were CLOSE !!

let say the file is named "file1"

the simplest syntax that works is:

head -1|sed 's/ //g' > newfile

notice the single quotes in the sed command !
without them it returns a "sed: command garbled s/" error.

The syntax I used included cases for mulitple spaces or TABS. But since I am not using tabs YOU WIN !

Told ya it was easy !
0
 
RandybAuthor Commented:
oh my solution ..sorry !

sed 's/^[       ]*//'

note: between the [    ] is a space and a tab character..the * means more than zero spaces or tabs ...basically ALL or them.
0
 
RandybAuthor Commented:
ooops ...accepted the wrong answer ...sorry for those who pay to see it !

Have a good one.

Randy
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.