Pergunta

Eu tenho um problema com o uso AWK simplesmente remover um campo de um córrego, ilustrado abaixo:

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

Eu uso o seguinte código para remover o primeiro campo:

$ awk '{$ 1 = ""; imprimir}' Example.out

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

Por que é este o caso? É isso porque AWK remove todos os espaços em branco? - isso pode ser evitado

Atenciosamente de antecedência

Foi útil?

Solução

http://awk.freeshell.org/RangeOfFields

Contém uma descrição de como fazê-lo. Ele também links para http://student.northpark.edu/pemente/awk/awktail. txt que contém 3 soluções para o problema. Tanto quanto eu sei, se você atribuir a um campo, em seguida, o separador de campos de saída é usado para concatenar todos os campos juntos. Então " "+ suddendly é recolhido para um espaço. Leve-o com um grão de sal, porém, eu não sou nenhum perito awk. Por exemplo, tente atribuir : ao OFS variável e dois pontos em vez de espaços irá resultar em entre campos na saída:

echo a b c | awk 'BEGIN{ OFS = ":" } { $1=""; print }'
$ :b:c

Se você usar g awk, então você pode usar sua extensão gensub que considero bastante simples de usar:

print gensub($1 "[\t ]*(.*)", "\\1", 1); 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top