#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)
Connected \o/
Welcome to sHell. · eval is evil.
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
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 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 - https://www.maccagnoni.eu - https://www.domotego.com
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 : 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
#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
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
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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 (♥)
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
#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 !
Du coup la dernière version marche très bien, je vais la garder
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 ):
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.
Connected \o/
Welcome to sHell. · eval is evil.
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 : 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
#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 ... 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 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 - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#12 Le 19/02/2013, à 02:22
- Mathal44
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.
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 ?
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
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
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).
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 : 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
#15 Le 19/02/2013, à 09:22
- tiramiseb
Re : Récupérer un lien dans un fichier texte par script ou commande
Ton code est plus long mais plus simple, et il ne retourne pas d'erreur
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 - https://www.maccagnoni.eu - https://www.domotego.com
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,
"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
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 - https://www.maccagnoni.eu - https://www.domotego.com
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*
Connected \o/
Welcome to sHell. · eval is evil.
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 - https://www.maccagnoni.eu - https://www.domotego.com
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 !
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)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#21 Le 27/02/2013, à 01:51
- Mathal44
Re : Récupérer un lien dans un fichier texte par script ou commande
"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
avec le code précédent j'avais ceci:
http://dl.free.fr/kNL3uMqxz
http://rapidgator.net/file/62110534/Nar … 0.avi.html
http://dl.free.fr/n5kUKaMrR
http://dl.free.fr/phr0X8G5y
http://freakshare.com/files/23ya0b2u/Na … 3.avi.html
http://netload.in/dateipOwFpiH9YE/Narut … 14.avi.htm
http://dl.free.fr/m2bfFsb1Q
http://dl.free.fr/hxwtrFEHe
http://dl.free.fr/jAoBUW6Z2
http://dl.free.fr/gHxsCM77C
http://dl.free.fr/dwWJKaVOu
http://dl.free.fr/usgpmRCDS
http://dl.free.fr/eYBFW2JPF
http://q2b1k1.1fichier.com/
http://dl.free.fr/kVPnn0elf
http://freakshare.com/files/jqqrguvf/Na … 9.avi.html
http://rapidgator.net/file/54532217/Nar … 0.avi.html
avec ce code-ci j'ai déjà 7 liens en moins sur les 18 premiers !
http://dl.free.fr/m2bfFsb1Q
http://rapidgator.net/file/62110534/Nar … 0.avi.html
http://dl.free.fr/n5kUKaMrR
http://lhz3hx.1fichier.com/
http://netload.in/dateipOwFpiH9YE/Narut … 14.avi.htm
http://dl.free.fr/m2bfFsb1Q
http://q2b1k1.1fichier.com/
http://dl.free.fr/kVPnn0elf
http://7ez8qc.1fichier.com/
http://rapidgator.net/file/54532217/Nar … 0.avi.html
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:
http://rapidgator.net/file/62110534/Nar … 0.avi.html
http://dl.free.fr/n5kUKaMrR
http://lhz3hx.1fichier.com/
http://netload.in/dateipOwFpiH9YE/Narut … 14.avi.htm
http://dl.free.fr/m2bfFsb1Q
http://q2b1k1.1fichier.com/
http://dl.free.fr/kVPnn0elf
http://7ez8qc.1fichier.com/
http://rapidgator.net/file/54532217/Nar … 0.avi.html
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
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.
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
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 :
Watael: tu avoueras que la syntaxe reste difficilement compréhensible...
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:
http://dl.free.fr/kNL3uMqxz
http://dl.free.fr/n5kUKaMrR
http://dl.free.fr/phr0X8G5y
http://lhz3hx.1fichier.com/
http://dl.free.fr/m2bfFsb1Q
http://dl.free.fr/hxwtrFEHe
http://dl.free.fr/jAoBUW6Z2
http://dl.free.fr/gHxsCM77C
http://dl.free.fr/dwWJKaVOu
http://dl.free.fr/usgpmRCDS
http://dl.free.fr/eYBFW2JPF
http://q2b1k1.1fichier.com/
http://dl.free.fr/kVPnn0elf
http://7ez8qc.1fichier.com/
http://dl.free.fr/kX5QPJIhO
http://dl.free.fr/ckfMzjScB
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 ?
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
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne