awk + imprime do terceiro campo até o final da linha cada palavra com um espaço

3

Como imprimo todas as palavras do $ Organs (do terceiro campo) com um espaço entre cada órgão para outro? Meu problema é que cada parâmetro de $ Organ tem um número de órgãos diferente, então não posso adivinhar o último número de campo. Eu preciso da sintaxe do awk que imprime o parametro $ Organs do terceiro campo até o último campo com um espaço entre a palavra.

Organs="a bb c ddd ee ff rr ff"
Organs="1 2    3 4 5   6 7 8 9 10 11 12 13 14 15 16 20 21 22"
Organs="I need to lern awk I hope I will do the best"
Organs="I need help"


echo $Organs| awk '{print $3" "$4" "$5" "$6 .......?}'
    
por jennifer 16.11.2010 / 14:35

3 respostas

4
% echo $Organs | awk '{              \
       for (i = 3; i <= NF; i++) {   \
          printf("%s ", $i);         \
       }                             \
       printf("\n") }'
    
por 16.11.2010 / 15:05
1

Tente algo assim:

for (i = 3; i <= NF; i++)
    printf("%s ", $i);
print ""

NF fornece o número de campos na linha. Dê uma olhada neste FAQ:

  • link

Concorda melhor com o stackoverflow.com.

    
por 16.11.2010 / 15:07
0
awk '{
  $1=$2=""  # suppress first two fields
  out=substr($0, 3)  # suppress the two leading occurrences of OFS that remain
  print out
}'

Isso pressupõe que o OFS avalie em um único espaço, que é seu valor padrão.

Esta solução pode ser um pouco mais rápida que as outras. Ele poderia ser mais lento também: depende de ser mais rápido reatribuir campos e recuperar $0 , como esta solução, ou implementar um loop de awk, como as outras soluções fazem. Mas você não vai notar a diferença de velocidade, de qualquer forma.

    
por 19.04.2012 / 12:54

Tags