Awk: récupérer le xème caractère d'une ligne

Résolu
tlep Messages postés 597 Statut Membre -  
fiddy Messages postés 11653 Statut Contributeur -
Bonjour,


est-il possible avec awk (ou autre) de récupérer par exemple le 112ème caractère de chaque ligne pour un fichier donné ?


Merci :-)

7 réponses

dubcek Messages postés 19021 Statut Contributeur 5 637
 
hello
et aussi

$ cut --byte=6 < plop
A
B
C
D
E
F
3
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Salut,

Yes, et pour le moment c'est la plus simple ;-)
0
tlep Messages postés 597 Statut Membre 118
 
A priori j'ai trouvé en fait:

toto="abcd"
echo "$toto"|awk '{ print substr($0,2,1) }'
=>b

C'est bien awk :-)
1
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Re,

Non, ce n'est pas bien. Perl c'est bien :-DDDD
Je n'ai pas moyen de tester, mais ça doit être quelque chose comme ça
perl -ne 'print $1 if /^.{111}(.)/' fichier
perl -ne 'print substr($_,111,1)' fichier
perl -ne '($x)=unpack("x111 A1",$_);print "$x\n";' fichier
--
106485010510997108
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,
[tmpfs]$ cat plop
12345A78910
12345B78910
12345C78910
12345D78910
12345E78910
12345F78910

[tmpfs]$ sed 's/.\{5\}\(.\).*/\1/' plop
A
B
C
D
E
F

[tmpfs]$
;-))
1
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Salut,

Je n'ai pas testé
sed 's/^.\{111\}\(.\).*/\1/' fichier
--
106485010510997108
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Oups...

Mieux vaut tard que jamais ;-))
0
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Salut,

Ben, non.
Tu viens de confirmer ce que je n'ai pas pu testé ;-))
0
dubcek Messages postés 19021 Statut Contributeur 5 637
 
en fait
cut -b6
pour être portable sur les Unixes non GNU/Linux
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Salut,
Oui la solution avec cut, est la plus simple. Mais puisqu'elle se base sur le byte, s'il y a un accent dans la chaîne, ça marche plus. (Oui je sais, je suis un rabat-joie ^^).. La solution avec sed dans ce cas marche merveilleusement bien.
Ou alors :
for i in $(<plop); do echo ${i:3:1}; done
Cdlt
0
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Salut,

(Oui je sais, je suis un rabat-joie ^^)..

Ben, un o****** ne dure pas très longtemps de toute façon ;-DDDDD
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
[tmpfs]$ cat plop
12345A78910
12345B78910
12345C78910
ÉÙÔ45D78910
1234éE78910
12À45F78910

[tmpfs]$ cut -b 6 plop
A
B
C
D
E
F

[tmpfs]$
Marche bien ;-\

;-))
0
fiddy Messages postés 11653 Statut Contributeur 1 847 > jipicy Messages postés 41342 Statut Modérateur
 
Etrange. Que vaut ta variable LANG ?
0
jipicy Messages postés 41342 Statut Modérateur 4 896 > fiddy Messages postés 11653 Statut Contributeur
 
$ echo $LANG
fr_FR
0
fiddy Messages postés 11653 Statut Contributeur 1 847 > jipicy Messages postés 41342 Statut Modérateur
 
La voilà l'explication ^^.
En fr_FR.UTF-8, la solution par byte ne marche pas puisque é sera codé sur deux bytes.
0