OVH Cloud OVH Cloud

Awk

1 réponse
Avatar
Kennel Yves
J'ai écris le script suivant pour extraire un certains nombre de pages
d'un fichier d'édition :

cat test | awk -v A=66 -v Z=69 -v FF=`echo "\f"` -v S=test2 \
'BEGIN {FS="\n"; RS=FF; ORS=RS; if (Z == 0) Z=9999999} (NR > A)&&(NR <=
Z) {p++
; print $0 >S} \
END {print p " pages extraites"}'

Je veux, dans cet exemple, extraire les pages 66 à 69.

Lorsque j'exécute ce dernier, il me donne le message d'erreur suivant :
awk : 0602-534 La longueur de la ligne *************************** ne
doit pas dépasser 10 239 octets.

Je suis sous AIX 4.3.3

Quelqu'un a une idée ?
Merci.

1 réponse

Avatar
Stephane Chazelas
2004-01-16, 09:28(+01), Kennel Yves:
[...]
cat test | awk -v Af -v Zi -v FF=`echo "f"` -v S=test2
'BEGIN {FS="n"; RSÿ; ORS=RS; if (Z == 0) Z™99999} (NR > A)&&(NR < > Z) {p++
; print $0 >S}
END {print p " pages extraites"}'

Je veux, dans cet exemple, extraire les pages 66 à 69.

Lorsque j'exécute ce dernier, il me donne le message d'erreur suivant :
awk : 0602-534 La longueur de la ligne *************************** ne
doit pas dépasser 10 239 octets.

Je suis sous AIX 4.3.3


Utilise gawk (qui n'a pas cette limite) ou prends-toi s-y
autrement.
D'abord, "cat" ne sert à rien, "echo" non plus.

Tu peux faire (à supposer que f soit seul sur sa ligne):

< test awk -v Af -v Zi -v p=1 -v S=test2 '
$0 == "f" { p++ }
p >= A && (Z <= 0 || p <= Z) { print > S }
END { if (p >= A) print (p > Z ? Z : p) - A " pages extraites" }'

(par exemple)

(pas testé).

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]