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 12/08/2014, à 16:04

Link_Octree

[RESOLU] BASH: Appliquer une commande à une seule colonne d'un txt

Bonjour,

Je dispose du fichier texte suivant:

 Stade de Reims	2 - 2	 Paris Saint-Germain
 SC Bastia	3 - 3	 Olympique de Marseille
 Evian TG FC	0 - 3	 SM Caen
 EA Guingamp	0 - 2	 AS Saint-Etienne
 LOSC Lille	0 - 0	 FC Metz

Je voudrais supprimer les espaces se trouvant juste avant le nom de l'équipe 1, et juste avant celui de l'équipe 2.
Je tiens à faire celà en apprenant comment restreindre une commande sur une colonne en particulier (même si ce n'est pas la méthode la plus "propre" car je compte m'en resservir pour d'autres usages par la suite).

Le code que j'aimerais utiliser serait quelque chose comme ceci:
cat fichier.txt | cut -f3 => pour la "restriction"
sed -i 's/^ *//' fichier.txt => pour la suppression de l'espace en question

Le soucis, c'est que je ne sais pas comment "enchainer" les deux commandes.

Si quelqu'un à une idée, merci d'avance !

Dernière modification par Link_Octree (Le 13/08/2014, à 18:45)

Hors ligne

#2 Le 12/08/2014, à 17:23

pingouinux

Re : [RESOLU] BASH: Appliquer une commande à une seule colonne d'un txt

Bonjour,
Si tu veux supprimer les espaces précédant les noms des équipes, ceci devrait convenir

sed -r 's/^ *|(\t) */\1/g' fichier.txt

Hors ligne

#3 Le 13/08/2014, à 02:30

nesthib

Re : [RESOLU] BASH: Appliquer une commande à une seule colonne d'un txt

Pas sûr de comprendre ta démarche pingouinux.
Tu ne voulais pas plutôt dire :

sed -r 's/\s+/ /g' fichier.txt

ou

sed 's/\s\+/ /g' fichier.txt

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#4 Le 13/08/2014, à 07:16

pingouinux

Re : [RESOLU] BASH: Appliquer une commande à une seule colonne d'un txt

Salut nesthib :
Ma commande en #2 correspond bien à ce que je voulais faire. Le fichier de départ est constitué de 3 colonnes séparées par des tabulations, les colonnes 1 et 3 commençant par une espace. Ma commande supprime les espaces en tête des colonnes.
Ta commande en #3 conserve l'espace en tête de la colonne 1, et utilise l'espace au lieu de la tabulation pour séparer les colonnes.
C'est à Link_Octree de préciser ce qu'il veut.

Ajouté : On peut même simplifier ma commande

sed -r 's/(^|\t) */\1/g' fichier.txt

Dernière modification par pingouinux (Le 13/08/2014, à 08:08)

Hors ligne

#5 Le 13/08/2014, à 08:31

Link_Octree

Re : [RESOLU] BASH: Appliquer une commande à une seule colonne d'un txt

Salut vous deux,

pingouinux: Effectivement, je voulais bien supprimer les espaces en début de colonne 1, et en début de colonne 3. Je n'ai pas encore testé ta commande mais je fais çà dès que possible.

Par contre, comme je l'ai précisé en gras dans mon post, et même si c'est pas la plus performante/propre des méthodes, çà serait vraiment important pour moi d'apprendre à "restreindre" une commande sur une colonne en particulier (avec cut, ou un outil similaire) car j'ai la certitude que çà me servira dans un autre contexte plus tard.

Vos commandes seds, bien que beaucoup plus efficaces je n'en doute pas, me permettent pas de les adapter à des cas similaires vu que je ne maitrise vraiment pas sed autant que vous.

Merci d'avance smile

Hors ligne

#6 Le 13/08/2014, à 08:44

pingouinux

Re : [RESOLU] BASH: Appliquer une commande à une seule colonne d'un txt

Si tu insistes, voici deux autres commandes qui font la même chose

paste <(cut -f1 fichier.txt|sed 's/^ *//') <(cut -f2 fichier.txt) <(cut -f3 fichier.txt|sed 's/^ *//')
awk -F'\t' -v OFS="\t" '{sub("^ *","",$1);sub("^ *","",$3);print}' fichier.txt

Ajouté : Ou même, pour la seconde

awk -F'\t' -v OFS="\t" '{sub("^ *","",$1);sub("^ *","",$3)}1' fichier.txt

Dernière modification par pingouinux (Le 13/08/2014, à 08:49)

Hors ligne

#7 Le 13/08/2014, à 18:44

Link_Octree

Re : [RESOLU] BASH: Appliquer une commande à une seule colonne d'un txt

Je suis en train de tester tout celà en ce moment même, merci beaucoup pingouinux !

La première solution m'intéresse particulièrement, j'ai la certitude que je vais me servir souvent de cette structure big_smile

Merci encore, sujet résolu !

Hors ligne