#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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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
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
Merci encore, sujet résolu !
Hors ligne