views:

3587

answers:

3

(Almost exact duplicate of http://stackoverflow.com/questions/408469/keeping-original-format-post-passing-through-awk submitted by same person.)

I have a simple question pertaining to gawk, illustrated below:

  1 int blah (void)
  2 {
  3         if (foo) {
  4                 printf ("blah\n");
  5         }       
  6         return 0;
  7 }

Using the following gawk code - using gensub() to maintain original formatting:

 gawk '{ print gensub($1, "\t", 1) }' ./sample_code.out

     int blah (void)
     {
             if (foo) {
                     printf ("blah\n");
             }       
             return 0;
     }

How can I use gawk or awk (maybe with regular expressions) to remove previous whitespace before field $1 (^ )

Illustrated below:

 int blah (void)
 {
         if (foo) {
                 printf ("blah\n");
         }       
         return 0;
 }

Kind regards in advance

A: 
awk '{sub(/^[ \t]+/, ""); print}'

This is from the famous awk 1 liners list, can be found here: http://student.northpark.edu/pemente/awk/awk1line.txt

Zsolt Botykai
+1  A: 

This works, but in the knowledge that you'll always want to strip 3 spaces.

vinko@parrot:~$ cat foo.c
  1 int blah (void)
  2 {
  3         if (foo) {
  4                 printf ("blah\n");
  5         }
  6         return 0;
  7 }

vinko@parrot:~$ gawk '{ print gensub(/^   /,"",1,gensub($1, "", 1)) }' foo.c    
int blah (void)
{
        if (foo) {
                printf ("blah\n");
        }
        return 0;
}

Vinko Vrsalovic
A: 

This strikes me as being a case of 'wrong tool for the job'. I'd use sed`:

sed 's/^[ <tab>]*//' sample.out

Now, if the problem is all about the inner-most details of awk, this may be no help; if the problem is to get spaces removed, it is quicker and (at least arguably) simpler.

Jonathan Leffler
Hi Jonathan, first of all, thanks for your answer. Yes - it's possible to use sed - but using this implementation, original formatting is removed
Aaron