Удалить пробелы перед полем с помощью AWK - PullRequest
2 голосов
/ 03 января 2009

( Почти точная копия Сохранение оригинального формата POST, проходящего через AWK , отправленного тем же лицом. )

У меня есть простой вопрос, относящийся к g awk, показанный ниже:

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

Использование следующего кода gawk - использование gensub () для сохранения исходного форматирования:

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

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

Как я могу использовать g awk или awk (возможно, с регулярными выражениями), чтобы удалить предыдущий пробел перед полем $ 1 (^)

Показано ниже:

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

С уважением, заранее

Ответы [ 3 ]

4 голосов
/ 03 января 2009
awk '{sub(/^[ \t]+/, ""); print}'

Это из списка известных лайнеров awk 1, можно найти здесь: http://student.northpark.edu/pemente/awk/awk1line.txt

2 голосов
/ 03 января 2009

Мне кажется, что это «неправильный инструмент для работы». Я бы использовал sed`:

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

Теперь, если проблема заключается в самых внутренних деталях awk, это может не помочь; если проблема заключается в удалении пробелов, это происходит быстрее и (по крайней мере, возможно) проще.

1 голос
/ 03 января 2009

Это работает, но с учетом того, что вы всегда захотите удалить 3 пробела.

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;
}

...