Question AWK

Le
Aglaee
Bonjour

Je cherche a traiter un fichier F construit comme ceci A B
C ..X Y Z
(Une liste de lettre ou de mots separés par un espace)

Je lance cat F | awk '{ print ("%10.10s %10.10s %10.10s", $1 $2
$3 }' OK

mon probleme est de travailler sur tous les caracteres ou mots de la
ligne et je ne sais aller que jusqu'a $9.
Je n'ai pas trouve de correspondance au shitf.

Comment puis je faire. Je n'ai que awk a ma disposition (pas de gawk)

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Marc Boyer
Le #17314391
On 2008-09-23, Aglaee
Bonjour

Je cherche a traiter un fichier F construit comme ceci A B
C .....X Y Z
(Une liste de lettre ou de mots separés par un espace)

Je lance cat F | awk '{ print ("%10.10s %10.10s %10.10sn", $1 $2
$3 }' OK

mon probleme est de travailler sur tous les caracteres ou mots de la
ligne et je ne sais aller que jusqu'a $9.
Je n'ai pas trouve de correspondance au shitf.

Comment puis je faire. Je n'ai que awk a ma disposition (pas de gawk)



split ?

# 0 1 2 3 4 5 6 7 8 9 10 11 12 13
{ s= split( $0, tab, " ");
for( i=0 ; i < s ; ++i )
printf("%10.10s ",tab[i] );
print "n" ;
}

En passant, le cat est complètement inutile ici.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)
Alain Ketterlin
Le #17316051
Aglaee
Je cherche a traiter un fichier F construit comme ceci A B
C .....X Y Z
(Une liste de lettre ou de mots separés par un espace)

Je lance cat F | awk '{ print ("%10.10s %10.10s %10.10sn", $1 $2
$3 }' OK



Tu as essayé $10 ? Ca marche. Dans le cas général :

awk '{
printf("%10.10s",$1);
for ( i=2 ; i<=NF ; i++ )
printf(" %10.10s",$i);
printf("n");
}'

ou quelque chose comme cela. En Awk, $ est un opérateur, tu peux même
écrire des trucs du style : print $(1+(NR-1)%2)

-- Alain.
Aglaee
Le #17321411
On 23 sep, 16:57, Alain Ketterlin
Aglaee > Je cherche a traiter un fichier F construit comme ceci     A B
> C  .....X Y Z
> (Une liste de lettre ou de mots separés par un espace)

> Je lance   cat F | awk '{ print ("%10.10s %10.10s %10.10sn", $1 $2
> $3  }'    OK

Tu as essayé $10 ? Ca marche. Dans le cas général :

awk '{
    printf("%10.10s",$1);
    for ( i=2 ; i<=NF ; i++ )
        printf(" %10.10s",$i);
    printf("n");

}'

ou quelque chose comme cela. En Awk, $ est un opérateur, tu peux même
écrire des trucs du style : print $(1+(NR-1)%2)

-- Alain.




La solution de Marc et la tienne fonctionne. Merci
Publicité
Poster une réponse
Anonyme