Pergunta

( Quase duplicata exata de Manter POST formato original passando por AWK apresentado pela mesma pessoa. )

I têm uma simples questão pertencente a g awk, ilustrado abaixo:

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

Usando o seguinte código gawk - usando gensub () para manter a formatação original:

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

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

Como posso usar g awk ou awk (talvez com expressões regulares) para remover espaço em branco anterior antes de campo $ 1 (^)

ilustrado abaixo:

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

Atenciosamente de antecedência

Foi útil?

Solução

Isso funciona, mas no conhecimento que você sempre vai querer tirar 3 espaços.

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

Outras dicas

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

Esta é da famosa lista de forros awk 1, pode ser encontrada aqui: http: //student.northpark.edu/pemente/awk/awk1line.txt

Esta me parece ser um caso de 'ferramenta errada para o trabalho'. Eu usaria sed`:

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

Agora, se o problema é tudo sobre os mais internos detalhes de awk, este pode ser nenhuma ajuda; se o problema é fazer com que os espaços removido, ele é mais rápido e (pelo menos discutivelmente) mais simples.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top