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.

nombre réponses : 25

#0 -1 »  Extraire une variable d'un fichier texte désordonné » Le 23/08/2018, à 10:26

Link_Octree
Réponses : 6

Bonjour,

Je dispose d'un fichier texte assez désordonné qui comporte la variable suivante

data-preconnect-urls="une_url"

:

Je voudrais extraire le contenu se trouvant entre les deux guillemets mais je n'y parvient pas. J'ai essayé avec cut mais il supporte un seul charactère comme délimiteur. J'ai donc essayé de tricher avec sed en remplacant "data-preconnect-urls=" par un unique charactère que je ne pense pas trouver à d'autre endroits dans ce fichier, le sigle £ par exemple. Celà ne fonctionne toujours pas car sed détecte £ comme plusieurs charactères.

J'ai également fait plusieurs essais infructueux avec grep.

Auriez-vous une idée de comment je pourrais m'y prendre s'il vous plait? Idéalement j'aimerais comprendre le code afin de pouvoir l'adapter moi même tout seul à d'autres situations similaires.

Cordialement,

#1 Re : -1 »  Extraire une variable d'un fichier texte désordonné » Le 24/08/2018, à 14:28

Link_Octree
Réponses : 6
pingouinux a écrit :

Bonjour,
Tu peux essayer ceci :

sed -nr 's/.*\bdata-preconnect-urls="([^"]+)".*/\1/p' fichier

Ton code me semble le plus simple, serait-il possible de l'adapter pour couvrir les cas cette variable apparait plusieurs fois dans mon fichier, avec plusieurs URL différentes? Merci beaucoup!

#2 -1 »  Restreindre grep à une seule colonne ? » Le 24/05/2017, à 14:18

Link_Octree
Réponses : 4

Bonjour,
Je dispose du fichier-type.txt suivant:

23 May 2017 09:27:16,8651,81.***.**.***,BT,BT,United Kingdom,DORSET,BRIDPORT,WINDOWS NT 10.0,768X1366,EN-US,CHROME,58.0.3029.110,GMT+00:00,,A,2
23 May 2017 09:23:14,79617154,94.**.***.**,OTENET S.A.,OTENET S.A.,Greece,DRAMA,DRÁMA,WINDOWS NT 6.1,1050X1680,EL,CHROME,58.0.3029.110,GMT+02:00,,C,1
23 May 2017 09:01:04,127,94.***.**.***,OTENET S.A.,OTENET S.A.,Greece,ATTIKI,ATHENS,WINDOWS NT 6.1,1080X1920,EL,CHROME,58.0.3029.110,GMT+02:00,,G,1

Je voudrais "séparer" ce fichier selon la valeur du champ n°16. Ce champ peut avoir plusieurs valeurs possibles, listées dans mon fichier valeurs-possibles.txt

Le code devrait, je pense, être proche du suivant:

while read line; do
  cat fichier-type.txt | grep "$line" > A.csv
done <valeurs-possibles.txt

Là où je bloque, c'est comment restreindre grep à une colonne spécifique (la 16 dans mon cas) ?
J'ai essayé pas mal de choses, y compris une adaptation du code suivant, sans succés:

awk -F, '$3 == 12' file.csv

Merci d'avance smile

#3 Re : -1 »  Restreindre grep à une seule colonne ? » Le 25/05/2017, à 12:35

Link_Octree
Réponses : 4

Merci beaucoup, çà produit exactement le résultat que je voulais smile

Si ce n'est pas trop te demander, pourrais-tu expliquer un peu ta commande ? En particulier le -vval="$val" j'ai cru à une faute de frappe au début.

#4 -1 »  Restreindre Grep à un terme exact ? » Le 09/08/2016, à 18:13

Link_Octree
Réponses : 3

Salut à tous,

Je voudrais grep un terme exact (ISP) dans un fichier.txt, j'ai essayé beaucoup de paramètres: -w ; -Fx ; entourer le mot clé de < > etc. mais aucun ne semble fonctionner dans mon cas. Soit la commande ne renvoit rien, soit elle renvoit les deux résultats.

Avez-vous une idée de comment résoudre celà ? J'aimerai une solution que je puisse réutiliser à la suite (ne pas contourner le problème en comptant le nombre de charactères par exemple).

Fichier.txt

ISP
ISP Org

Merci d'avance !

#5 Re : -1 »  Restreindre Grep à un terme exact ? » Le 09/08/2016, à 18:30

Link_Octree
Réponses : 3

@MicP: Le terme recherché est bien "ISP", je pense que tu as répondu avant que j'ai eu le temps d'éditer.

Merci pour tes explications, çà a l'air de fonctionner smile

#6 -1 »  [Bash] Restreindre sed ou awk à une colonne d'un fichier csv » Le 21/06/2016, à 16:58

Link_Octree
Réponses : 6

Salut à tous,

J'ai le fichier .csv suivant:

05/17/2016 15:37:47,102,11801
05/21/2016 13:45:53,79,116554
05/21/2016 22:03:26,3,9926911

Le second champ est un code numérique, j'aimerais remplacer sa valeur (via sed ou awk) par quelque chose de plus lisible ex:

05/17/2016 15:37:47,GOOGLE,11801
05/21/2016 13:45:53,MICROSOFT,116554

Pour celà, je cherche à resteindre l'exécution de SED ou d'AWK à cette seule colonne. J'avais pensé faire çà avec cut mais çà ne marche pas comme prévu.

Je suis tombé sur ce topic où quelqu'un cherchait à faire la même chose.
Malheureusement, je n'ai pas réussi à adapté le code proposé par un contributeur à mon cas:

awk -F@ '$3 ~ /pattern/ { OFS= "@"; $3 = "replace"; }'

J'ai remplacé les "@" par des virgules vu que ce sont mes séparateurs de champs à moi, et les "$3" par des "$2" vu que c'est la colonne qui m'intéresse à moi... sans succés jusque là.

Si vous pouviez y jeter un coup d'oeil, merci d'avance !

#7 Re : -1 »  [Bash] Restreindre sed ou awk à une colonne d'un fichier csv » Le 21/06/2016, à 17:52

Link_Octree
Réponses : 6
Anonyme68 a écrit :

Bonjour,

Dans ton exemple on pourrait juste faire ceci :

sed 's/,102,/,GOOGLE,/g;s/,79,/,MICROSOFT,/g'

Cordialement

Il peut arriver parfois, coïncidence assez courante, que le troisième champ soit égal au second, hors je ne veux pas remplacer le second champ (corrige moi si je me trompe, mais il me semble que ta commande ne prendrait pas en compte ce cas de figure).

@Watael: Les données de remplacement seraient soient stocké dans le script bash lui même, soit dans une base de données externe csv.

#8 -1 »  [Bash] Renommer plusieurs fichiers en conservant qu'une partie du nom » Le 06/04/2015, à 11:12

Link_Octree
Réponses : 6

Hello,

Je dispose d'un dossier contenant plusieurs fichiers .csv nommés sous la forme Blablabla - Blablabla - 3101.csv.

Je souhaiterais renommer ces fichiers en ne conservant que les quatre derniers charactères précédent l'extension.
Même si c'est pas l'idéal, j'aimerais beaucoup faire celà via cut, que je connais un petit peu, et que je pourrais ainsi adapter dans d'autres scripts futurs.

J'aimerais ensuite inverser les deux premiers et les deux dernières charactères pour obtenir la date sous la forme US (mois/jour) du genre 0131.csv

Le bout de code auquel j'ai pensé et qui ne fonctionne pas est le suivant:

for file in /home/user/dossier
do
mv $file $file | cut -d"." -f1 | tail -c5 
done

Merci beaucoup smile

#9 Re : -1 »  [Bash] Renommer plusieurs fichiers en conservant qu'une partie du nom » Le 06/04/2015, à 12:20

Link_Octree
Réponses : 6

Merci du tuyau mais çà ne fonctionne pas: le script ne semble pas s'appliquer correctement au 4 derniers charactères du nom du fichier:

+ for file in '/home/user/dossier/*.csv'
++ basename PMT .csv
++ tail -c5
+ bsn=PMT
++ dirname PMT
+ drn=.
+ nom=TPM.csv
+ mv -i PMT ./TPM.csv
mv: impossible d'évaluer « PMT »: Aucun fichier ou dossier de ce type

#10 -1 »  [Bash] Vérifier qu'un fichier ne contient pas un mot-clés » Le 28/11/2014, à 13:25

Link_Octree
Réponses : 4

Hello,

J'ai un fichier.txt qui est censé contenir un mot-clés. Il arrive parfois que ce mot-clés soit introuvable (quand le fichier a mal été téléchargé) je voudrais alors re-télécharger ce même fichier jusqu'à ce que le mot clés soit bel est bien présent dans le fichier.txt.

J'ai essayé BEAUCOUP de lignes de codes censées faire ceci, sans succés, je pense faire une erreur de syntaxe mais après une heure d'essais, je désespère :S

Voilà mon code actuel:

while [ grep -v -q "MotCle" prefixe_${nom_fichier}.html ]
		do
		wget ...
		done

Si une erreur vous saute au yeux, merci de m'en faire part.

#11 Re : -1 »  [Bash] Vérifier qu'un fichier ne contient pas un mot-clés » Le 02/12/2014, à 10:46

Link_Octree
Réponses : 4

Merci pour votre aide Sciensous & sputnick smile

Je voudrais ajouter une sécurité pour sortir de la boucle et abandonner si au bout de disons 5 tentatives le mot clé n'est toujours pas trouvé dans le fichier téléchargé.
J'ai une vague idée de comment interfacer çà avec mon code, mais encore une fois je bloque sur la syntaxe depuis plus de demi heure, j'ai essayé avec let, avec un exemple int, pas moyen d'arriver à quelque chose :S

let "compteur=0"
until grep -q "\bMotCle\b" "prefixe_${nom_fichier}.html" || compteur <=7
     do
     wget ...
     let "var++"
done

Merci d'avance !

#12 -1 »  [RESOLU] BASH: Appliquer une commande à une seule colonne d'un txt » Le 12/08/2014, à 16:04

Link_Octree
Réponses : 6

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 !

#13 Re : -1 »  [RESOLU] BASH: Appliquer une commande à une seule colonne d'un txt » Le 13/08/2014, à 08:31

Link_Octree
Réponses : 6

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

#14 Re : -1 »  [RESOLU] BASH: Appliquer une commande à une seule colonne d'un txt » Le 13/08/2014, à 18:44

Link_Octree
Réponses : 6

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 !

#15 -1 »  Restreindre grep à une collonne uniquement ? » Le 17/06/2014, à 18:10

Link_Octree
Réponses : 8

Hello,

J'ai le fichier visible ci-dessous,
Je voudrais que ma commande retourne le numéro de chaque ligne, avant d'afficher la valeur qu'elle contient, mais qu'elle n'affiche à l'écran que les lignes dont la valeur de la seconde colonne est égale à 5.

2
1
3
1
4
2
1
3
2
1
1
3
2
1
1
8
2
2
3
1
1
5
4
1
1
1
1
8
1
4
1
2
3
1
1
2
1
1
3
1
1
3
1
3
1
5
5
3
1
8
2
3
2
1
1
4
3
3
3
1
10
4
3
5
3
2
7
1
3
1
2
3

Je ne peux pas utiliser cut de la façon dont j'ai l'habitude de le faire car j'aimerais retrouver le numéro de ligne dans le rendu, sous la forme:

 
    22	5
    46	5
    47	5
    64	5

Si vous aviez des propositions de solutions, de préférence des codes assez simples à comprendre, pour que je puisse l'adapter à d'autres scripts, merci smile !

#16 Re : -1 »  Restreindre grep à une collonne uniquement ? » Le 17/06/2014, à 19:24

Link_Octree
Réponses : 8

C'est bien celà oui, je teste celà dès que possible merci smile

Connaitrais-tu une variable pour afficher toutes les lignes (précédé du numéro de ligne) contenant une valeur supérieure à 5 ? Ou moins proprement une valeur de 5, 6, 7, etc jusqu'à 25 ?

Merci beaucoup !

#17 Re : -1 »  Restreindre grep à une collonne uniquement ? » Le 18/06/2014, à 20:26

Link_Octree
Réponses : 8

Merci beaucoup les gars, les deux solutions fonctionnent parfaitement smile

#18 Re : -1 »  Restreindre grep à une collonne uniquement ? » Le 20/06/2014, à 16:52

Link_Octree
Réponses : 8

Plutôt que d'ouvrir un autre thread pour çà:

J'ai intégrée la solution proposée par @pingouinux dans mon script:

nl fichier | awk '$2>=5'

A présent, celà m'arrangerais de pouvoir affecter le nombre minimal (5) dans une variable que je pourrais réutiliser pour obtenir un code du type:

nombre_mini=5
nl fichier | awk '$2>=$nombre_mini'

Celà pose des erreurs d'interprétation dans mon script, je pense que c'est lié aux simple quote, mais le fait de les remplacer par des doubles ne résoud pas le problèmes car à ce moment là, la partie "$2" semble être interprétée anormalement à son tour.

Si vous aviez une idée de solution pour résoudre celà, merci beaucoup, à nouveau smile !

#19 Re : -1 »  Restreindre grep à une collonne uniquement ? » Le 21/06/2014, à 16:13

Link_Octree
Réponses : 8

Merci pour le trick, çà fonctionne parfaitement smile

#20 -1 »  Remplacer une chaine de caractères par un fichier txt entier avec sed » Le 23/03/2014, à 14:33

Link_Octree
Réponses : 3

Bonjour,

Après une heure de galère/google, je me résoud à poser la question ici:
Je souhaites remplacer la chaine "a_remplacer" du fichier texte squelette.txt par plusieurs autres lignes contenues dans le fichier variable.txt.

squelette.txt

0
a_remplacer
4

variable.txt

1
2
3

J'ai essayé plusieurs solutions (mon séparateur est la charactère dièse puisque mon fichier devrait contenir des slash à termes):

variable=`cat variable.txt`
sed -i "s#a_remplacer#$variable#g" squelette.txt
variable=`cat variable.txt`
sed -i "s#a_remplacer#${variable}#g" squelette.txt[
sed -i "s#a_remplacer#`cat variable.txt`#g" squelette.txt

Le fait que contienne plusieurs lignes ne semble pas plaire à sed qui me renvoi le message suivant:

sed: -e expression #1, char 15: unterminated `s' command

Si quelqu'un a une idée, merci d'avance smile

#21 Re : -1 »  Remplacer une chaine de caractères par un fichier txt entier avec sed » Le 24/03/2014, à 15:07

Link_Octree
Réponses : 3

Merci @casperfr & @credenhill: vos deux méthodes fonctionnent parfaitement smile

#22 -1 »  [RESOLU] Appliquer un remplacement sed sur une seule colonne » Le 21/03/2014, à 08:13

Link_Octree
Réponses : 5

Salut,

J'ai le fichier structuré suivant 1.txt:

27ème journée	09/03/2012 - 20:00	 ESTAC Troyes  	0 - 1	  Châteauroux
26ème journée	02/03/2012 - 19:00	 Châteauroux  	2 - 2	  Stade de Reims

Je compte intégrer plus tard ce fichier dans une page html, pour celà je cherche à mettre en valeur les matchs où les résultats sont 2-2:

sed -i 's#2 - 2#<strong>2 - 2</strong>#g' 1.txt

Problème, cette commande impacte un autre champs que je ne voudrais pas changer:

27ème journée    09/03/2012 - 20:00     ESTAC Troyes      0 - 1      Châteauroux

Je souhaites donc restreindre ma commande sed seulement sur la colonne souhaitée, j'ai tenté de combiner cat, cut et sed avec des pipes mais sans succés jusque là...

cat 1.txt | cut -f4 -s | sed -i 's#0 - 0#<strong><font color="red">0 - 0</font></strong>#g' 1.txt

Pourriez-vous me proposer une solution fonctionelle proche du code ci-dessous svp ? Un code plus propre/intéligent/rapide existe sûrement mais si je ne suis pas en mesure de le comprendre pour l'adapter à d'autres projets, ce n'est pas ce que je recherche.

Merci d'avance !

#23 Re : -1 »  [RESOLU] Appliquer un remplacement sed sur une seule colonne » Le 23/03/2014, à 14:34

Link_Octree
Réponses : 5

Merci à credenhill, je suis plutot parti sur ta solution, bien que celle de psyphi semble aussi intéressante, quand à rpl je connaissais pas du tout, merci ek0892 pour cette découverte smile

#24 -1 »  [Bash] Remplacer une ligne par une autre » Le 08/03/2014, à 20:51

Link_Octree
Réponses : 1

Bonjour,

J'ai en entrée un fichier txt avec certaines lignes qui sont déja mises en forme dans la syntaxe qui m'intéresse, celle-ci:

2ème journée 	18/08/2013 - 14:00 	AS Monaco FC 	4 - 1 	Montpellier Hérault SC 	2e 	Vidéo
3ème journée 	23/08/2013 - 20:30 	AS Monaco FC 	0 - 0 	Toulouse FC 	2e 	Vidéo

D'autres lignes sont par contre pollués de données qui ne m'intéressent pas, comme ceci:

Les rencontres de AS Monaco FC - août 2013 1ère journée 	10/08/2013 - 21:00 	Girondins de Bordeaux 	0 - 2 	AS Monaco FC 	4e 	Vidéo
Les rencontres de AS Monaco FC - septembre 2013 4ème journée 	01/09/2013 - 21:00 	Olympique de Marseille 	1 - 2 	AS Monaco FC 	1er 	Vidéo

Ce que je voudrais faire, c'est uniformiser le tout, et faire en sorte que toutes les lignes soient dans la mise en forme voulue.

Je sais comment détecter les lignes avec la mise en forme inadaptée (grep "Les rencontres de AS Monaco FC"), je sais également supprimer les données superflues (cut -d ' ' -f10-50) mais je ne vois pas comment écraser les données précédements pollués par celles avec la mise en forme voulue (j'ai déja utilisé sed, mais là je vois pas comment faire).

Quelqu'un pourrait-il me donner un coup de main là dessus ? Je privilégie un code compréhensible me permettant de bien comprendre la chose pour l'adapter à d'autres scripts smile

Pour info le fichier en entree: http://pastebin.com/7b5vpKmf

Merci d'avance !