Supprimer des champs par lignes d'un fichier

fptv7514 -  
 fptv7514 -
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
Configuration: Linux RHEL 5
A voir également:

10 réponses

dubcek Messages postés 18814 Date d'inscription   Statut Contributeur Dernière intervention   5 655
 
correction
awk 'NF == 12 {$6=$5=""} ; NF == 11 {$5=""} ; {print $0}' < fichier
2
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
 
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 18814 Date d'inscription   Statut Contributeur Dernière intervention   5 655
 
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   Statut Modérateur Dernière intervention   4 898 > dubcek Messages postés 18814 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 18814 Date d'inscription   Statut Contributeur Dernière intervention   5 655 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
effectivement - ou rien ...c'est beau les RE
0
dubcek Messages postés 18814 Date d'inscription   Statut Contributeur Dernière intervention   5 655
 
hello
awk 'NF == 12 {$6=$5=""} ; NF == 11 {$6=""} ; {print $0}' < fichier
0
fptv7514
 
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
fptv7514
 
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   Statut Modérateur Dernière intervention   4 898
 
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
fptv7514
 
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 18814 Date d'inscription   Statut Contributeur Dernière intervention   5 655
 
une possibilite
awk '/^\*\*\*/ {print $NF}' < fichier
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
 
sed '/^\*/{s/[^/]*//}' fichier
0
fptv7514
 
Merci beaucoup
A+
0