Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Question AWK

3 réponses
Avatar
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=E9s par un espace)

Je lance cat F | awk '{ print ("%10.10s %10.10s %10.10s\n", $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

3 réponses

Avatar
Marc Boyer
On 2008-09-23, Aglaee wrote:
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)
Avatar
Alain Ketterlin
Aglaee writes:

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.
Avatar
Aglaee
On 23 sep, 16:57, Alain Ketterlin wrote:
Aglaee writes:
> 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