我有一長串 URL 存盤在一個文本檔案中,我將瀏覽并下載這些檔案。但在此之前,我想從串列中洗掉重復的 URL。需要注意的一件事是,某些 URL 看起來不同,但實際上指向同一頁面。URL 中的唯一元素(域和路徑除外)是查詢字串中的前 2 個引數。例如,我的文本檔案如下所示:
https://www.example.com/page1.html?id=12345&key=dnks93jd&user=399494&group=23
https://www.example.com/page1.html?id=15645&key=fkldf032&user=250643&group=12
https://www.example.com/page1.html?id=26327&key=xkd9c03n&user=399494&group=15
https://www.example.com/page1.html?id=12345&key=dnks93jd&user=454665&group=12
如果在第二個查詢字串(鍵)之前定義了唯一 URL,則第 1 行和第 4 行是重復的。我想完全洗掉重復的行,所以甚至不保留。在上面的示例中,第 2 行和第 3 行將保留,而第 1 行和第 4 行將被洗掉。
如何使用基本的命令列工具實作這一目標?
uj5u.com熱心網友回復:
使用awk:
$ awk -F'[?&]' 'FNR == NR { url[$1,$2,$3] ; next } url[$1,$2,$3] == 1' urls.txt urls.txt
https://www.example.com/page1.html?id=15645&key=fkldf032&user=250643&group=12
https://www.example.com/page1.html?id=26327&key=xkd9c03n&user=399494&group=15
讀取檔案兩次;第一次計算您感興趣的位出現的次數,第二次僅列印出現過一次的位。
uj5u.com熱心網友回復:
要縮短其他答案中的代碼:
awk -F\& 'FNR == NR { url[$1,$2] ; next } url[$1,$2] == 1' urls.txt urls.txt
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/317399.html
