Sed : filtrer par un numéro de colonne

Résolu
tonticoeur -  
 tonticoeur -
Bonjour,

Je suis en présence de fichiers de log dont chaque ligne fait strictement 132 caractères.
Je souhaite afficher les lignes de ces fichiers qui ont le caractère 4 en position 81 à l'aide de l'outil SED.

J'ai chercher un peu partout sur le net mais sans résultat. Je vous soumet donc aujourd'hui cette question.

Merci de votre aide.

2 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

sed n'est ps fait pour ça, il te faut voir du côté de "awk", beaucoup plus adapté à ce genre de manip...

jp@MDK:~/tmpfs ssh$ cat plop
abcdefghijkl
abcdefghdjkl
abcdefghijkl
abcdefghfjkl
abcdefghijkl
abcdefghfjkl
abcdefghdjkl
abcdefghijkl

jp@MDK:~/tmpfs ssh$ awk 'substr($0,4,1) == substr($0,9,1) {print $0}' plop
abcdefghdjkl
abcdefghdjkl

jp@MDK:~/tmpfs ssh$

Remplace "9,1" par "81,1".
;-))
0
lami20j
 
Salut,

Il n'y a pas des références arrièreres pour sed ?!

Voici en perl
perl -ne 'print if /^.{3}(.).{4}\1/' plop

A remplacer {4} avec {76}
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

Si, mais c'est le genre de truc auquel je ne pense jamais ;-((

sed -n '/^.\{3\}\(.\).\{4\}\1/p' plop
ou
sed -rn '/^.{3}(.).{4}\1/p' plop

Merci ;-))
0
lami20j > jipicy Messages postés 41342 Statut Modérateur
 
Re,

Et moi j'ai testé avec sed mais j'ai oublié de mettre les backslash avant les paranthèses.
Je n'ai pas encore l'habitude ;-))
0
jipicy Messages postés 41342 Statut Modérateur 4 896 > lami20j
 
On a oublié "egrep" dans l'histoire :

egrep '^.{3}(.).{4}\1' plop

:-))
0
lami20j > jipicy Messages postés 41342 Statut Modérateur
 
Re,

Effectivement je n'ai pas pensé à egrep. Merci.
Ca doit marcher avec n'importe quelle application en fonction de l'implémentation des références arrières.
0
jipicy Messages postés 41342 Statut Modérateur 4 896 > lami20j
 
Sûrement, mais du coup 'grep' c'est le plusse mieux pour les paresseux ;-))
0