2017-09-28 4 views
1

Ich habe zwei Dateien, eine mit etwa 100 Stammdomänen und eine zweite Datei mit nur URLs. Jetzt muss ich diese URL-Liste filtern, um eine dritte Datei zu erhalten, die nur URLs enthält, die Domains von der Liste haben.Foreach-Schleife in bash

Beispiel der URL-Liste:

| URL       | 
| ------------------------------| 
| http://github.com/name  | 
| http://stackoverflow.com/name2| 
| http://stackoverflow.com/name3| 
| http://www.linkedin.com/name3 | 

Beispiel für Wortliste:

github.com 
youtube.com 
facebook.com 

resut:

| http://github.com/name  | 

Mein Ziel ist es ganze Reihe heraus zu filtern, wo URL bestimmtes Wort enthalten . Das ist, was ich versucht:

for i in $(cat domains.csv); 
do grep "$i" urls.csv >> filtered.csv ; 
done 

Ergebnis ist seltsam, ich habe einige der Links bekommen, aber nicht alle von ihnen, die Root-Domains aus der ersten Datei enthalten. Dann versuchte ich dasselbe mit Python zu machen und sah, dass bash nicht das tut, was ich wollte. Ich habe ein besseres Ergebnis mit Python-Skript, aber es braucht mehr Zeit, um Python-Skript zu schreiben als bash-Befehle auszuführen. Wie soll ich dies mit bash weiter machen?

+2

Haben Sie 'bash' zum Verarbeiten solcher Textdateien verwenden möchten? Sie könnten einfach 'grep' alleine dafür verwenden. – Inian

+0

Als ich das versuchte: grep "github" urls.csv> github.com Ich habe alle github URLs, so denke ich, dass ich etwas falsch mit für jede Schleife tun –

+0

@Spopic: [Sie können die Antwort als akzeptiert markieren durch Klicken auf das Häkchen oben links in dieser Antwort] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) –

Antwort

4

Mit grep:

grep -F -f domains.csv url.csv 

Testergebnisse:

$ cat wordlist 
github.com 
youtube.com 
facebook.com 

$ cat urllist 
| URL       | 
| ------------------------------| 
| http://github.com/name  | 
| http://stackoverflow.com/name2| 
| http://stackoverflow.com/name3| 
| http://www.linkedin.com/name3 | 

$ grep -F -f wordlist urllist 
| http://github.com/name  | 
+0

Sie sollten '- F '-Flag auch, um die Strings als Literal zu behandeln und nicht regexp – Inian

+0

' grep -Fxf domains.csv <(cut -d '[|]' codeforester

+0

@Inian dachte über Ihren Vorschlag und fügte hinzu, aber immer noch ohne '-F' gibt es Wunsch o/p, die OP will –