Pregunta

( duplicado casi exacto de Mantener el formato original POST pasando a través de AWK enviado por la misma persona. )

Tengo una pregunta simple relacionada con g awk, que se ilustra a continuación:

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

Utilizando el siguiente código gawk: utilizando gensub () para mantener el formato original:

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

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

¿Cómo puedo usar g awk o awk (quizás con expresiones regulares) para eliminar los espacios en blanco anteriores antes del campo $ 1 (^)

ilustrado abajo:

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

Saludos cordiales por adelantado

¿Fue útil?

Solución

Esto funciona, pero sabiendo que siempre querrá quitar 3 espacios.

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

Otros consejos

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

Esto es de la famosa lista de liners de awk 1, se puede encontrar aquí: http: //student.northpark.edu/pemente/awk/awk1line.txt

Esto me parece un caso de 'herramienta incorrecta para el trabajo'. Yo uso sed`:

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

Ahora, si el problema tiene que ver con los detalles más internos de awk , esto puede no ser de ayuda; Si el problema es eliminar los espacios, es más rápido y (al menos posiblemente) más simple.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top