Supprimer des champs par lignes d'un fichier

Fermé
fptv7514 - 29 août 2008 à 12:33
 fptv7514 - 1 sept. 2008 à 11:32
Bonjour,
Script bash
je dois formater un fichier pour chaque lignes soient identiques en nombre de champs !!
En gros mon fichier toto.txt comporte 100 lignes et sur chaque ligne il y a de 10 à 12 champs séparé par des espaces.

Ce que je veux en retour c'est le meme fichier toto.txt avec des lignes de 10 champs !!
donc par exemple pour une ligne avec 12champs je veux supprimer le champs 5 et 6
pour une ligne avec 11 champs je veux supprimer le champs 5
pour une ligne avec 10 champs rien faire

Ex : fichier de départ :
toto1 toto2 toto3 toto4 toto5 toto6 toto7 toto8 toto9 toto10 toto11 toto12
tata1 tata2 tata3 tata4 tata5 tata6 tata7 tata8 tata9 tata10 tata11
titi1 titi2 titi3 titi4 titi5 titi6 titi7 titi8 titi9 titi10

fichier résultats:
toto1 toto2 toto3 toto4 toto7 toto8 toto9 toto10 toto11 toto12
tata1 tata2 tata3 tata4 tata6 tata7 tata8 tata9 tata10 tata11
titi1 titi2 titi3 titi4 titi5 titi6 titi7 titi8 titi9 titi10

Comme cela j'ai un fichier avec des lignes de 10 champs maxi.
Cordialement
A voir également:

10 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
29 août 2008 à 15:52
correction
awk 'NF == 12 {$6=$5=""} ; NF == 11 {$5=""} ; {print $0}' < fichier
2
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
29 août 2008 à 17:33
Salut,

Une idée avec sed...
[tmpfs]$ cat fichier
dans un fichier je doit supprimer des lignes entières
supprimer les lignes commençant par Block
supprimer les lignes commençant par Statistics

supprimer les lignes commençant par Total
supprimer les lignes commençant par Entries

supprimer les lignes commençant par Used
supprimer les lignes commençant par Data
supprimer les lignes vides

supprimer les lignes avec que des moins : - - - - - - - - - - - mais tous collés les uns aux autres
------------- - - - - - - - - - -
---------------------------------
-------- ----- - - - - ----------------
-
Block blabla
Statistics blabla
Total blabla
Entries blabla
Used blabla
Data blabla

[tmpfs]$ sed '/^\(Block\|Statistics\|Total\|Entries\|Used\|Data\|-*$\)/d' fichier
dans un fichier je doit supprimer des lignes entières
supprimer les lignes commençant par Block
supprimer les lignes commençant par Statistics
supprimer les lignes commençant par Total
supprimer les lignes commençant par Entries
supprimer les lignes commençant par Used
supprimer les lignes commençant par Data
supprimer les lignes vides
supprimer les lignes avec que des moins : - - - - - - - - - - - mais tous collés les uns aux autres
------------- - - - - - - - - - -
-------- ----- - - - - ----------------
[tmpfs]$
;-))
2
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
30 août 2008 à 10:16
Une question: je ne vois pas dans les expressions la suppression des lignes vides ^$ pourtant elles le sont ?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024
30 août 2008 à 10:29
Salut,

En fait les lignes vident sont englobées dans "-*$" (le début "^" étant générique avec les parenthèses).

Le "-*" matchant la présence d'un tiret ou pas et dans le cas où il n'y en a pas, c'est alors considéré comme une ligne vide.

Je t'avoue que dans mon 1er jet de la syntaxe j'avais mis un "^$" suivi du "-*$"...

;-))
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
30 août 2008 à 10:44
effectivement - ou rien ...c'est beau les RE
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
29 août 2008 à 13:30
hello
awk 'NF == 12 {$6=$5=""} ; NF == 11 {$6=""} ; {print $0}' < fichier
0
Merci beaucoup cela marche nickel, j'avais corriger la petite erreur mais rien de grave !!
Par contre dans la meme idée :
dans un fichier je doit supprimer des lignes entières
supprimer les lignes commençant par Block
supprimer les lignes commençant par Statistics
supprimer les lignes commençant par Total
supprimer les lignes commençant par Entries
supprimer les lignes commençant par Used
supprimer les lignes commençant par Data
supprimer les lignes vides
supprimer les lignes avec que des moins : - - - - - - - - - - - mais tous collés les uns aux autres

Si possible tout en meme temps
Moi j'ai trouvé ça , mais j'arrive pas à faire tout ensemble.
awk ' $1!="Block" { print; } ' < fichier

Cordialement
0

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

Posez votre question
Encore un grand merci !!!
dernière demande enfin je pense !!

Dans mon fichier j'ai des lignes commençant par *** blabla blabla blabla /blabla

je veux supprimer le début de la ligne jusqu 'au symbole /

Merci pour votre aide
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
1 sept. 2008 à 09:45
j'ai des lignes commençant par *** blabla blabla blabla /blabla
Peux-tu être plus précis s'il te plaît ?

Elles commencent par "***" ?
Il y-a-t'il qu'un seul slash dans la ligne ?
Est-ce les seules lignes commençant par "***" ?

Un exemple précis et concret serait le bienvenu ;-)
0
Voici le type de ligne :

*** Report for user quotas on device /dev/sde1
*** Report for user quotas on device /dev/sdf1

moi je veux juste :

/dev/sde1
/dev/sdf1

Voila.
Merci
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
1 sept. 2008 à 10:02
une possibilite
awk '/^\*\*\*/ {print $NF}' < fichier
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
1 sept. 2008 à 10:13
sed '/^\*/{s/[^/]*//}' fichier
0
Merci beaucoup
A+
0