Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

#1 Le 17/02/2013, à 05:04

Mathal44

Récupérer un lien dans un fichier texte par script ou commande

Bonjour,

Je cherche à récupérer un lien précis dans un fichier texte où sont présents plusieurs liens.

Voici mon fichier texte:

# Uptobox
#NOTFOUND http://uptobox.com/n7dba7ubdkdm
# Free
http://dl.free.fr/kNL3uMqxz
# Rapidgator
http://rapidgator.net/file/62108214/Naruto_Shippuden_\u00c3\u00a9pisode_209.avi.html
# Freakshare
#NOTFOUND http://freakshare.com/files/7cq3j4zc/Naruto-Shippuden---pisode-209.avi.html
# Rapidshare
http://rapidshare.com/files/671889758/Naruto Shippuden \u00c3\u00a9pisode 209.avi
# 2shared
#NOTFOUND http://www.2shared.com/video/ymJKHoWN/Naruto_Shippuden_pisode_209.html
# Uploaded
#NOTFOUND http://uploaded.to/file/xhhpiutq
# Filecloud
#NOMODULE http://filecloud.io/0vqm4dzt
# 1fichier
http://xhc36f.1fichier.com/
# Filerio
#NOMODULE http://filerio.in/kjqduw6c9vjo
# Depositfiles
#NOTFOUND http://depositfiles.com/files/887edz3z3
# Turbobit
#NOTFOUND http://turbobit.net/ywj3onzs2e1c.html
# Netload
#NOTFOUND http://netload.in/dateiTjvY9vY2pE/NarutoShippudenÃpisode209.avi.htm

Si ce n'est pas fait automatiquement, je pense qu'on peut ignorer toutes les lignes commençant par #.
Ensuite il faut récupérer la première ligne avec "http://" et l'envoyer dans un fichier texte, et s'arrêter là, c'est à dire s'il y a d'autres lignes avec "http://" il faut les ignorer.
Comment faire ?

Merci !
Mathal.

Hors ligne

#2 Le 17/02/2013, à 06:03

Watael

Re : Récupérer un lien dans un fichier texte par script ou commande

salut,

Avec sed et l'option silence, tu places les instructions print et quit dans un bloc, sous la condition que la ligne commence par http

Dernière modification par Watael (Le 17/02/2013, à 06:04)


eval, c'est mal.

Hors ligne

#3 Le 17/02/2013, à 06:51

nesthib

Re : Récupérer un lien dans un fichier texte par script ou commande

Pour avoir tous les liens (toutes les lignes non commentées) :

awk '!/^#/' fichier

Pour avoir seulement le premier :

awk '!/^#/{print;exit}' fichier

Pour avoir seulement le 3è :

awk '!/^#/{if(++_==3){print;exit}}' fichier

Pour avoir le premier lien qui vérifie le motif « xxx » :

awk '!/^#/{if(/xxx/){print;exit}}' fichier

Je pense que tu as de quoi faire wink


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ᴉsdnGMT-4

Hors ligne

#4 Le 17/02/2013, à 08:15

tiramiseb

Re : Récupérer un lien dans un fichier texte par script ou commande

Autre approche :

egrep "^http://" fichier | head -1

... Au lieu de dire "on ignore les commentaires et on lit tout le reste", on dit "on cherche les lignes commençant par http:// et on ne garde que la première"


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#5 Le 17/02/2013, à 08:25

nesthib

Re : Récupérer un lien dans un fichier texte par script ou commande

Oui, c'est vrai, je ne sais pas pourquoi j'ai fait par élimination ^^

Pour les solutions avec awk il suffit de remplacer les « !/^#/ » par « /^http/ ».

NB. au lieu d'utiliser un pipe + head il suffit d'ajouter l'option « -m1 » à grep.


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ᴉsdnGMT-4

Hors ligne

#6 Le 17/02/2013, à 08:49

tiramiseb

Re : Récupérer un lien dans un fichier texte par script ou commande

Rebonjour.
En effet, nesthib a raison, il y a plus simple que le pipe smile
Et puis j'ai mis "egrep" alors que "grep" suffit.

Ça donne donc :

grep -m 1 "^http://" fichier

... ce qui est une syntaxe plus facile à aborder que celle de awk big_smile


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#7 Le 17/02/2013, à 09:18

nesthib

Re : Récupérer un lien dans un fichier texte par script ou commande

Meuh non… on ne parle jamais assez de awk (♥)

tongue


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ᴉsdnGMT-4

Hors ligne

#8 Le 18/02/2013, à 00:25

Mathal44

Re : Récupérer un lien dans un fichier texte par script ou commande

Bonjour et merci pour vos réponses !
smile
Du coup la dernière version marche très bien, je vais la garder smile

Maintenant j'aimerai passer à un autre niveau, dois-je le faire ici ou ouvrir un nouveau sujet ?
Voilà:  j'ai plusieurs fichiers texte de cette sorte dont je dois extraire un lien valide,
et j'ajoute chaque nouveau lien dans un fichier texte en sortie, ce qui donne:

grep -m 1 "^http://" fichier01 >> liens_valides.txt
grep -m 1 "^http://" fichier04 >> liens_valides.txt
grep -m 1 "^http://" fichier14 >> liens_valides.txt
grep -m 1 "^http://" fichier38 >> liens_valides.txt
...

Du coup j'obtiens :

mathal@Mathal-ubuntu:~/ cat liens_valides.txt
http://dl.free.fr/kNL3uMqxz
http://dl.free.fr/m2bfFsb1Q
http://depositfiles.com/files/3pu0ndb5j
http://depositfiles.com/files/hbw89zfdl
http://dl.free.fr/hlTQ4GhAV

Est-il possible de comparer le nouveau lien à ajouter au dernier lien de la liste pour que ce ne soit pas le même hébergeur ?

Cela donnerait quelque chose comme (j'essaie de faire un algorithme avec ce que je crois avec compris des commandes mais il doit y avoir des erreurs hmm ):

NOUVEAULIEN="$(grep -m 1 "^http://" fichierXX )"
DERNIERLIEN="$(grep -m [dernier??] "^http://"  liens_valides.txt )"
# je n'ai pas trouvé l'option de grep pour lui dire de s'arrêter au dernier lien trouvé seulement

# Si le nouveau lien et le dernier lien ajouté ont le même hébergeur, prendre le 2e lien valide du fichierXX
Si
grep '^http://......' "${NOUVEAULIEN)" = grep '^http://......' "${DERNIERLIEN)"
alors
NOUVEAULIEN="$(grep -m 2 "^http://" fichierXX )" 
# ici je veux bien le 2e lien valide seulement, pas les 2 premiers, j'espère que c'est bien comme ça que ça s'écrit ?

# j'ajoute le nouveau lien qui a un hébergeur différent du dernier lien
"${NOUVEAULIEN)" >>  liens_valides.txt

Qu'en pensez-vous ?

Hors ligne

#9 Le 18/02/2013, à 00:54

Watael

Re : Récupérer un lien dans un fichier texte par script ou commande

salut,

awk -vchemin="." '/^http/{split($0,a,"/");if(a[3] != last){last=a[3];print $0" >>"chemin"/liens_valides.txt";nextfile}else next}' fichier*

si ça te va, tu adaptes la variable chemin, et tu enlèves les guillemets autour de la redirection.


eval, c'est mal.

Hors ligne

#10 Le 18/02/2013, à 00:56

nesthib

Re : Récupérer un lien dans un fichier texte par script ou commande

Tu peux remplacer ta suite de « grep … fichierX >>… », « grep … fichierY >>… » par « grep … fichier{X,Y,Z} >>… »

Pour ne pas prendre un serveur différent du dernier :

LAST="$(tail -1 liens)"
LASTSERVER=$(awk -F'/*' '{print $1"//"$2}' <<<"${LAST}")
awk '/^http/{if(!/'${LASTSERVER//\//\\\/}'/){print;exit}}' fichier

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ᴉsdnGMT-4

Hors ligne

#11 Le 18/02/2013, à 09:17

tiramiseb

Re : Récupérer un lien dans un fichier texte par script ou commande

Holala encore plein de syntaxes compliquées.
Voilà pourquoi je n'ai toujours pas appris à utiliser awk ^^

Ce que je comprend de ton problème :
- tu as un ensemble de fichiers, tu prends la première URL "U" de chacun d'entre eux
- tu mets cette première URL "U" dans un fichier "F", successivement
- mais seulement si la dernière ligne de "F" n'est pas égale à "U"

Vu que tu fais ça successivement, plutôt que de lire le fichier "F" à chaque fois, je te proposerais plutôt de stocker la valeur extraite dans une variable.

Ça donnerait :

for entree in [liste des fichiers (*)]
do
  nouvelleligne="$(grep -m 1 "^http://" $entree)"
  if [ "$nouvelleligne" != "$ancienneligne" ]
  then
    echo "$nouvelleligne" >> liens_valides.txt
    ancienneligne="$nouvelleligne"
  fi
done

(c'est une approche assez similaire à ce que tu as montré, mais en "propre" et un peu plus efficace smile ... et surtout facile à comprendre)

Après, bien sûr les scripts awk seront bien plus performants, mais à quel prix ! Pour ma part je n'y comprend rien à ce que Watael et nesthib proposent smile Il faut maîtriser awk pour bien comprendre ce qu'on y fait...


(*) : pour la liste des fichiers, tu as 50000 possibilités de la constituer :
- si les fichiers ont une base commune, des noms fixes et un suffixe qui change, tu peux faire comme nesthib le propose: « fichier{1,2,3,4} » => ça remplacera tout seul par « fichier1 fichier2 fichier3 fichier4 »
- si les fichiers sont tous dans un même répertoire (et il n'y a pas d'autre fichier dans ce répertoire), tu peux faire « /chemin/du/repertoire/* »
- si les fichiers ont tous le même préfixe (et il n'y a pas d'autre fichier avec le même préfixe), tu peux faire « fichier* »
etc...
PS: tu ne mets pas les "[" et "]" dans la ligne du "for" hein... ça donnerait par exemple « for entree in fichier* »

Dernière modification par tiramiseb (Le 18/02/2013, à 09:19)


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#12 Le 19/02/2013, à 02:22

Mathal44

Re : Récupérer un lien dans un fichier texte par script ou commande

Watael a écrit :

salut,

awk -vchemin="." '/^http/{split($0,a,"/");if(a[3] != last){last=a[3];print $0" >>"chemin"/liens_valides.txt";nextfile}else next}' fichier*

si ça te va, tu adaptes la variable chemin, et tu enlèves les guillemets autour de la redirection.

J'ai un problème de syntaxe :

awk: /^http/{split($0,a,"/");if(a[3] != last){last=a[3];print $0 >>~/chemin/liens_valides3.txt;nextfile}else next}
awk:                                                               ^ syntax error
awk: /^http/{split($0,a,"/");if(a[3] != last){last=a[3];print $0 >>~/chemin/liens_valides3.txt;nextfile}else next}
awk:                                                                                                        ^ syntax error

Ça doit venir du chemin pour le fichier liens_valides3.txt faut-il un espace ou un caractère en plus ou en moins ?


nesthib a écrit :

Tu peux remplacer ta suite de « grep … fichierX >>… », « grep … fichierY >>… » par « grep … fichier{X,Y,Z} >>… »
Pour ne pas prendre un serveur différent du dernier :

LAST="$(tail -1 liens)"
LASTSERVER=$(awk -F'/*' '{print $1"//"$2}' <<<"${LAST}")
awk '/^http/{if(!/'${LASTSERVER//\//\\\/}'/){print;exit}}' fichier

J'ai un problème avec cette solution aussi:

mathal@Mathal-ubuntu:~$  LAST="$(tail -1 liens.txt)"
mathal@Mathal-ubuntu:~$  LASTSERVER=$(awk -F'/*' '{print $1"//"$2}' <<<"${LAST}")
mathal@Mathal-ubuntu:~$  awk '/^http/{if(!/'${LASTSERVER//\//\\\/}'/){print;exit}}' liens_valides2.txt
awk: /^http/{if(!/#NOTFOUND
awk:              ^ expression régulière non terminée
awk: cmd. ligne:1: /^http/{if(!/#NOTFOUND
awk: cmd. ligne:1:                       ^ nouvelle ligne inattendue ou fin de la chaîne
mathal@Mathal-ubuntu:~$ 

Je n'ai pas du saisir où mettre les fichiers d'entrée et de sortie ?

Hors ligne

#13 Le 19/02/2013, à 03:06

Mathal44

Re : Récupérer un lien dans un fichier texte par script ou commande

tiramiseb a écrit :

Holala encore plein de syntaxes compliquées.
Voilà pourquoi je n'ai toujours pas appris à utiliser awk ^^
Ce que je comprend de ton problème :
- tu as un ensemble de fichiers, tu prends la première URL "U" de chacun d'entre eux
- tu mets cette première URL "U" dans un fichier "F", successivement
- mais seulement si la dernière ligne de "F" n'est pas égale à "U"

Effectivement, je ne comprends rien à awk non plus ^^
Ton code est plus long mais plus simple, et il ne retourne pas d'erreur wink
Par contre ça ne marche pas correctement, car tu compares les liens entiers, alors que je veux changer de serveur, par exemple pour ces 3 URL:
http://dl.free.fr/kNL3uMqxz
http://dl.free.fr/n5kUKaMrR
http://dl.free.fr/phr0X8G5y

Dans ton code elles seront considérées comme différentes, alors que le serveur est le même,
c'est pour ça que j'avais pensé à grep '^http://......' mais j'ai essayé avec ton code et ça ne fonctionne pas je ne dois pas bien le maitriser...

   for entree in liens_provisoires.txt
   do
    nouvelleligne="$(grep -m 1 "^http://" $entree)"
    C1="$(grep '^http://......' $nouvelleligne)"
    if [ "$C1" != "$C2" ]
    then
    echo "$nouvelleligne" >> liens_valides4.txt
    ancienneligne="$nouvelleligne"
    C2="$(grep '^http://......' $ancienneligne)"
   fi
   done

Ou est l'erreur ?

Hors ligne

#14 Le 19/02/2013, à 05:02

nesthib

Re : Récupérer un lien dans un fichier texte par script ou commande

Si tu obtiens « NOTFOUND » c'est que tu utilises le mauvais fichier (ou que je n'ai pas compris ce que tu cherches à faire…). J'ai testé et ma solution fonctionne parfaitement si l'on ne fait pas n'importe quoi, en l'occurrence, avec ton exemple elle saute le lien en dl.free.fr car celui ci est à la fin du fichier de liens (cf. message #8).
Sois un peu rigoureux parce que tu appelles un coup « fichier » un coup « liens » un coup « liens_valides » et au final tu mélanges tout.

Dans ma commande 1 « LAST="$(tail -1 FICHIER1)" », FICHIER1 est le fichier qui contient les liens valides (cf. message #8)
Dans ma commande 3 « awk '/^http/{if(!/'${LASTSERVER//\//\\\/}'/){print;exit}}' FICHIER2 », FICHIER2 est le fichier d'origine avec le mix de liens et commentaires (cf message #1).

NB. pour la commande de Watael, tu n'as pas lancé ce qu'il demande (tu as oublié les guillemets et awk ne sais pas ce que « ~ » veut dire).

Mathal44 a écrit :

Ou est l'erreur ?

Sans vouloir être méchant, principalement entre la chaise et le clavier. Il est vraiment important que tu comprennes ce que tu fais si tu veux apprendre à écrire des scripts. Courage !


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ᴉsdnGMT-4

Hors ligne

#15 Le 19/02/2013, à 09:22

tiramiseb

Re : Récupérer un lien dans un fichier texte par script ou commande

Mathal44 a écrit :

Ton code est plus long mais plus simple, et il ne retourne pas d'erreur wink
Par contre ça ne marche pas correctement, car tu compares les liens entiers, alors que je veux changer de serveur, par exemple pour ces 3 URL:
[...]
Ou est l'erreur ?


"grep" ne prend pas un sous-ensemble d'une ligne, il prend toute la ligne si une partie correspond à tout ce que tu cherches...

Je propose :

for entree in liens_provisoires.txt
do
  nouvelleligne="$(grep -m 1 "^http://" $entree)"
  nouveauserveur="$(echo "$nouvelleligne" | cut -d/ -f1-3)"
  if [ "$nouveauserveur" != "$ancienserveur" ]
  then
    echo "$nouvelleligne" >> liens_valides.txt
    ancienserveur="$nouveauserveur"
  fi
done

PS: évite les noms de variables genre "C1", "C2", etc... Ce n'est pas très compréhensible... Un vrai mot ça aide à mieux suivre !

Dernière modification par tiramiseb (Le 19/02/2013, à 09:22)


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#16 Le 19/02/2013, à 09:44

pingouinux

Re : Récupérer un lien dans un fichier texte par script ou commande

Bonjour,

tiramiseb  #15 a écrit :

"grep" ne prend pas un sous-ensemble d'une ligne, il prend toute la ligne si une partie correspond à tout ce que tu cherches...

Tu as l'option -o de grep qui permet de ne renvoyer que la partie de la ligne qui correspond.
Exemple

$ egrep -o -m 1 "^http://[^\/]+" <<<"http://depositfiles.com/files/hbw89zfdl"
http://depositfiles.com

Hors ligne

#17 Le 19/02/2013, à 09:48

tiramiseb

Re : Récupérer un lien dans un fichier texte par script ou commande

Merci pour la précision pingouinux smile

Si on veut, on peut donc remplacer :

$(echo "$nouvelleligne" | cut -d/ -f1-3)

par :

$(echo "$nouvelleligne" | egrep -o "http://[^\/]+")

... ce qui a le mérite de s'assurer que c'est une chaîne bien formée, avec "http://" etc, plutôt que de couper "bêtement" au 3me slash (cela dit, le premier grep s'est normalement déjà assuré de ça, dans ce cas précis)

Maintenant, il est improductif d'utiliser "egrep -o -m 1" (dans ce cas bien précis) car on a besoin de placer la ligne complète dans le fichier destination : le premier grep reste indispensable. Il vaut mieux donc stocker le retour du premier grep dans une variable et travailler sur la variable...


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#18 Le 19/02/2013, à 10:24

Watael

Re : Récupérer un lien dans un fichier texte par script ou commande

comme ça

awk -vchemin="." '/^http/{split($0,a,"/");if(a[3] != last){last=a[3];print $0 >>chemin"/liens_valides3.txt";nextfile}else next}' fichier*

il faut enlever les guillemets autour de la redirection, c'est tout.
chemin est une variable, elle ne doit pas être entre guillemets, dans awk.

comme ça, le chemin et le nom du fichier sont dans une variable (qui ne doit pas être entre guillemets puisque c'est une variable)

awk -v chmFic="./liens_valides3.txt" '/^http/{split($0,a,"/"); if(a[3] != last){last=a[3]; print $0 >> chmFic ; nextfile}else next}' fichier*

eval, c'est mal.

Hors ligne

#19 Le 19/02/2013, à 10:25

tiramiseb

Re : Récupérer un lien dans un fichier texte par script ou commande

Watael: tu avoueras que la syntaxe reste difficilement compréhensible...


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXème siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#20 Le 19/02/2013, à 10:40

Watael

Re : Récupérer un lien dans un fichier texte par script ou commande

Je n'avouerai jamais ! lol

awk n'est quand même pas aussi compliqué à lire que sed: les commandes sont des mots en anglais, ainsi que les fonctions.
Ce n'est vraiment pas beaucoup plus compliqué que le shell.
Pour mieux le comprendre, il faut le "déplier", en remplaçant les ';' par des alinéas, et en indentant correctement les groupes entre { }.

Dernière modification par Watael (Le 19/02/2013, à 10:40)


eval, c'est mal.

Hors ligne

#21 Le 27/02/2013, à 01:51

Mathal44

Re : Récupérer un lien dans un fichier texte par script ou commande

tiramiseb a écrit :

"grep" ne prend pas un sous-ensemble d'une ligne, il prend toute la ligne si une partie correspond à tout ce que tu cherches...
Je propose :

for entree in liens_provisoires.txt
do
  nouvelleligne="$(grep -m 1 "^http://" $entree)"
  nouveauserveur="$(echo "$nouvelleligne" | cut -d/ -f1-3)"
  if [ "$nouveauserveur" != "$ancienserveur" ]
  then
    echo "$nouvelleligne" >> liens_valides.txt
    ancienserveur="$nouveauserveur"
  fi
done

PS: évite les noms de variables genre "C1", "C2", etc... Ce n'est pas très compréhensible... Un vrai mot ça aide à mieux suivre !

Je viens de tester cette version, mais du coup il manque des liens hmm
avec le code précédent j'avais ceci:

avec ce code-ci j'ai déjà 7 liens en moins sur les 18 premiers ! sad

pourtant j'avais bien des liens actifs pour ces liens, par exemple:

Mais aucun n'apparait.


Du coup j'ai essayé avec [egrep -o "http://[^\/]+"] à la place de [cut -d/ -f1-3]
Mais là même résultat, il manque des liens en sortie:

Il faudrait peut-être intégrer le fait que s'il n'y a qu'un seul lien valide, il faut le prendre même si c'est le même hébergeur que le précédent lien ?

Dernière modification par Mathal44 (Le 02/03/2013, à 22:01)

Hors ligne

#22 Le 27/02/2013, à 02:26

Mathal44

Re : Récupérer un lien dans un fichier texte par script ou commande

nesthib a écrit :

Dans ma commande 1 « LAST="$(tail -1 FICHIER1)" », FICHIER1 est le fichier qui contient les liens valides (cf. message #8)
Dans ma commande 3 « awk '/^http/{if(!/'${LASTSERVER//\//\\\/}'/){print;exit}}' FICHIER2 », FICHIER2 est le fichier d'origine avec le mix de liens et commentaires (cf message #1).

Ah ben là c'est quand même plus clair, il faut bien reconnaitre que la commande awk est plutôt opaque pour les néofites. wink
En fait, j'ai adapté le nom de mes fichiers pour éviter les N° à la fin des noms, du coup pour obtenir chaque fichier correspondant à mon message #1, j'utilise:

while read line 
do 
   plowlist "${line}" >liens_provisoires.txt 
   plowdown -m -c liens_provisoires.txt
   [...]
done <liens_de_depart.txt

Et à la place de "[...]" j'insère les exemples de code que vous me proposez pour sortir le(s) lien(s).

Pour le tien j'avais effectivement inversé les fichiers, du coup après tes explications ça me donne:

   LAST="$(tail -1 liens_valides2bis.txt)"
   LASTSERVER=$(awk -F'/*' '{print $1"//"$2}' <<<"${LAST}")
   awk '/^http/{if(!/'${LASTSERVER//\//\\\/}'/){print;exit}}' liens_provisoires.txt

Mais ça me retourne tout de même un erreur:

tail: impossible d'ouvrir «liens_valides2bis.txt» en lecture: Aucun fichier ou dossier de ce type

Ce que j'en comprend c'est qu'il faudrait que le premier lien soit ajouté d'office dans «liens_valides2bis.txt» pour créer ce fichier avant d'en demander l'ouverture ou l'accès, est-ce cela ?

Dernière modification par Mathal44 (Le 02/03/2013, à 21:57)

Hors ligne

#23 Le 27/02/2013, à 02:54

Mathal44

Re : Récupérer un lien dans un fichier texte par script ou commande

Watael a écrit :

comme ça, le chemin et le nom du fichier sont dans une variable (qui ne doit pas être entre guillemets puisque c'est une variable)

awk -v chmFic="./liens_valides3.txt" '/^http/{split($0,a,"/"); if(a[3] != last){last=a[3]; print $0 >> chmFic ; nextfile}else next}' fichier*

Très bien j'ai pris cette version que j'arrivais à comprendre à peu près, même si je suis d'accord avec tiramiseb :

tiramiseb a écrit :

Watael: tu avoueras que la syntaxe reste difficilement compréhensible...

wink
Voici ce que ça donne :

   awk -v chmFic=./liens_valides3bis.txt '/^http/{split($0,a,"/"); if(a[3] != last){last=a[3]; print $0 >> chmFic ; nextfile}else next}' liens_provisoires.txt*

Du coup j'obtiens bien la liste des liens, mais elle ne prend pas en compte le serveur précédent pour alterner les serveurs à chaque lien valide:

Que faut-il ajouter ?

Dernière modification par Mathal44 (Le 02/03/2013, à 21:59)

Hors ligne

#24 Le 02/03/2013, à 21:58

Mathal44

Re : Récupérer un lien dans un fichier texte par script ou commande

Plus de réponses ? sad

Hors ligne

#25 Le 02/03/2013, à 22:33

Watael

Re : Récupérer un lien dans un fichier texte par script ou commande

Sans fichiers supplémentaires, je ne peux modifier le script donné.

Celui que j'ai donné semble fonctionner avec deux fois le même fichier fourni dans le premier message

http://dl.free.fr/kNL3uMqxz >>./liens_valides.txt
http://rapidgator.net/file/62108214/Naruto_Shippuden_\u00c3\u00a9pisode_209.avi.html >>./liens_valides.txt

eval, c'est mal.

Hors ligne

Haut de page ↑