Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/03/2019, à 17:38

L'Africain

(Résolu) Supprimer lignes dans fichier

Bonjour,
J'ai un fichier avec des parties comme ça:

</def></entryFree>
In 1Cr 1:42, Dison è Disan.
</def></entryFree>

Je voudrais scripter la suppression de la première ligne comme ça:

</def></entryFree>

Donc en gros après le script ça devrait ressembler à ça:

In 1Cr 1:42, Dison è Disan.
</def></entryFree>

Sachant que ce genre d'erreur arrive à ne nombreuses reprises dans le fichier en question.
Merci d'avance

Dernière modification par L'Africain (Le 15/03/2019, à 21:20)


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#2 Le 15/03/2019, à 17:58

Watael

Re : (Résolu) Supprimer lignes dans fichier

salut,

que le fichier soit du XML n'est pas une information pertinente.

sed -i 1d fichier.xml

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 15/03/2019, à 18:03

L'Africain

Re : (Résolu) Supprimer lignes dans fichier

Watael a écrit :

que le fichier soit du XML n'est pas une information pertinente.

J'ai modifié le titre mais je comprends pas ta commande, elle va seulement me supprimer ma ligne 1 qui n'est nullement concernée par le problème, les numéros de lignes à supprimer sont totalement aléatoire, d'où mon problème car sed ne lit pas correctement les \n dans la première partie de la commande du genre:

sed -ri 's/^(<\/def><\/entryFree>)\n(*.*)\n(<\/def><\/entryFree>)/\2\3/g' mon_fichier

Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#4 Le 15/03/2019, à 20:02

pingouinux

Re : (Résolu) Supprimer lignes dans fichier

Bonsoir,
Ceci ?

awk '{if(/<\/def><\/entryFree>/){if(c%2){print};c++}else print}' fichier

Ajouté :
Et pour s'assurer que la chaîne recherchée est seule sur sa ligne :

awk '{if(/^<\/def><\/entryFree>$/){if(c%2){print};c++}else print}' fichier

Dernière modification par pingouinux (Le 15/03/2019, à 20:05)

Hors ligne

#5 Le 15/03/2019, à 20:09

L'Africain

Re : (Résolu) Supprimer lignes dans fichier

Oui merci pingouinux, ça semble fonctionne (je vérifie à fond bientôt) mais comment se fait-il que toutes les lignes avec

<\/def><\/entryFree>

Ne sont pas supprimée? C'est quoi l'option qui fait ça? Histoire que je pige bien la commande. smile


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#6 Le 15/03/2019, à 20:18

Watael

Re : (Résolu) Supprimer lignes dans fichier

L'Africain a écrit :

Je voudrais scripter la suppression de la première ligne


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 15/03/2019, à 20:21

melixgaro

Re : (Résolu) Supprimer lignes dans fichier

Watael a écrit :
L'Africain a écrit :

Je voudrais scripter la suppression de la première ligne

La première ligne du bloc montré (qui se trouve dans un fichier plus grand), pas la première ligne du fichier… wink

L'Africain a écrit :

J'ai un fichier avec des parties comme ça:


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#8 Le 15/03/2019, à 20:35

Watael

Re : (Résolu) Supprimer lignes dans fichier

alors il fallait donner un extrait plus représentatif du fichier, et la sortie correspondante attendue.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 15/03/2019, à 20:40

pingouinux

Re : (Résolu) Supprimer lignes dans fichier

L'Africain a écrit :

Oui merci pingouinux, ça semble fonctionne (je vérifie à fond bientôt) mais comment se fait-il que toutes les lignes avec

<\/def><\/entryFree>

Ne sont pas supprimée? C'est quoi l'option qui fait ça? Histoire que je pige bien la commande. smile

C'est la variable c (initialisée à 0 part défaut), qui compte les lignes recherchées.
Chaque fois qu'une ligne est rencontrée, elle est imprimée si c est impair, et c est incrémentée de 1 à chaque fois.

Édité : Précision

Dernière modification par pingouinux (Le 16/03/2019, à 08:13)

Hors ligne

#10 Le 15/03/2019, à 21:19

L'Africain

Re : (Résolu) Supprimer lignes dans fichier

@pinguinux, ok merci!


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#11 Le 16/03/2019, à 12:43

Sciensous

Re : (Résolu) Supprimer lignes dans fichier

je précise au cas où: c%2 veut dire c modulo 2 , soit: c=0, 1 et si c=2, c prend la valeur 0
tongue


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#12 Le 16/03/2019, à 16:09

LeoMajor

Re : (Résolu) Supprimer lignes dans fichier

bonjour,

variante getline, qui a de multiples usages
getline;  (nextline) au lieu  ... getline variable (affectation), par exemple

test.txt

<def>
cc
dd
</i>ee</i>
fin 
</def></entryFree>
In 1Cr 1:42, Dison è Disan. 
</def></entryFree>
aa
bb
</def></entryFree>
In 2Cr 2:42, Mison è Misan.
Out 4Br 2:52, Mistal
</def></entryFree>
</def>
awk -i inplace -v INPLACE_SUFFIX=.old  '/<\/def><\/entryFree>/ {m++; if(m==1)getline; if(m==2)m=0}; {print}'  test.txt

getline dans ce contexte, signifie "nextline"

"nouvelle écriture" test.txt =test.txt

<def>
cc
dd
</i>ee</i>
fin 
In 1Cr 1:42, Dison è Disan. 
</def></entryFree>
aa
bb
In 2Cr 2:42, Mison è Misan.
Out 4Br 2:52, Mistal
</def></entryFree>
</def>

"ancien" test.txt= test.txt.old

Hors ligne

#13 Le 16/03/2019, à 16:12

L'Africain

Re : (Résolu) Supprimer lignes dans fichier

Merci à vous tous, sympa de donner des solutions même quand c'est résolu! smile


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne