Supprimer une ligne et la précedente

Résolu/Fermé
lefreeman63 Messages postés 136 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 11 février 2016 - 4 mai 2012 à 09:53
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 - 7 mai 2012 à 10:49
Bonjour,

Bonjour tt le monde,

je cherche comment faire un petit morceau de script soir en perl soit en ksh.

Je cherche à parcourir un fichier vérifier chaque ligne voir si elle contient le champ "north-american-letter-white" et SI elle contient cette ligne je la supprime de mon fichier et je supprime la ligne du dessus.

Quelqu'un aurait une idée de génie, svp??? :-)

Merci d'avance


A voir également:

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
4 mai 2012 à 10:09
Salut,

Avec sed c'est faisable ;-))

$ cat plop 
ligne 1
ligne 2
ligne 3 elle contient le champ "north-american-letter-white"
ligne 4
ligne 5
ligne 6 elle contient le champ "north-american-letter-white"
ligne 7
ligne 8

$ sed -n '$p;N;/north-american-letter-white/{d};P;D;' plop 
ligne 1
ligne 4
ligne 7
ligne 8

$ 

;-))
1
lefreeman63 Messages postés 136 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 11 février 2016
4 mai 2012 à 10:47
Merci bien pour ton aide.

je me heurte à une erreur:

sed -n '$p;N;/north-american-letter-white/{d};P;D;' /tmp/diff_printer.dat
sed: Function $p;N;/north-american-letter-white/{d};P;D; cannot be parsed.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
4 mai 2012 à 10:49
Quel système ?
Quelle distrib ?
Quelle version de "sed" ?
Quel format de fichier (MS-DOS ou Unix) ?
0
lefreeman63 Messages postés 136 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 11 février 2016
4 mai 2012 à 11:00
Ha oui effectivement désolé pour l'oubli:
UNIX
AIX 6.1.0.0

/usr/bin/sed needs:
/usr/lib/libc.a(shr.o)
/unix
/usr/lib/libcrypt.a(shr.o)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
4 mai 2012 à 11:29
Essaie de mettre les commandes "sed" dans un fichier de script et d'appeler ensuite ce fichier comme suit :

$ cat script.sed 
#n
$ p                                    
N                                      
/north-american-letter-white/ {        
    d                                  
}                                      
P                                      
D

$ sed -f script.sed plop 
ligne 1
ligne 4
ligne 7
ligne 8

$
0
lefreeman63 Messages postés 136 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 11 février 2016
4 mai 2012 à 14:39
Merci encore de ton aide.
Même erreur:
:/tmp # sed -f script.sed diff_printer.dat
sed: Function $ p                                     cannot be parsed.
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
4 mai 2012 à 13:43
hello
en ksh "pur"
ksh ~ $ cat a8
1
2
3
north-american-letter-white
4
5
6
north-american-letter-white
7
8
north-american-letter-white
ksh ~ $ 
ksh ~ $ t=($(<a8)) ; for((n=0;n<${#t[@]};n++));do case ${t[n+1]} in (*north-american-letter-whit*) ((n=n+1));continue ;; esac ; echo  ${t[n]} ; done
1
2
4
5
7
ksh ~ $ 
1
lefreeman63 Messages postés 136 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 11 février 2016
4 mai 2012 à 14:40
Salut merci de ton aide:
j'obtient cette erreur:
/usr/bin/ksh: syntax error: '(' unexpected
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
Modifié par dubcek le 4/05/2012 à 14:43
tu as ((n++)) ou ((n=n+1)) ? j'ai changé le code
0
lefreeman63 Messages postés 136 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 11 février 2016
4 mai 2012 à 14:48
J'ai lancé cette commande exactement:

t=($(<diff_printer.dat)) ; for ((n=0;n<${#t[@]};n++));do case ${t[n+1]} in (*north-american-letter-whit*) ((n=n+1));continue ;; esac ; echo  ${t[n]} ; done
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
4 mai 2012 à 15:13
essaye dans un script avec set -x pour voir ou est l'erreur, on ne doit pas avoir la même version de ksh
#!/bin/ksh
set -x

t=($(<a8))
for((n=0;n<${#t[@]};n++));do
        case ${t[n+1]} in
                (*north-american-letter-whit*)
                        ((n++));continue ;; 
        esac
        echo  ${t[n]}
done
0
lefreeman63 Messages postés 136 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 11 février 2016
4 mai 2012 à 15:41
Merci encore de ton aide

:/tmp # ./script.ksh
./script.ksh[4]: syntax error at line 4 : '(' unexpected



:/tmp # cat script.ksh
#!/bin/ksh
set -x

t=($(<a8))
for((n=0;n<${#t[@]};n++));do
        case ${t[n+1]} in
                (*north-american-letter-whit*)
                        ((n++));continue ;;
        esac
        echo  ${t[n]}
done


Comment je peux savoir ma version de ksh?
0