【问题标题】:How to extract domain from a text file using Ubuntu Command?如何使用 Ubuntu 命令从文本文件中提取域?
【发布时间】:2017-03-21 15:56:05
【问题描述】:

我有一个网址文件,格式如下:

com.blendtuts/S
°=
com.blengineering.www/:http
±=
com.blenheimgang.www/le-porsche-museum-en-details/porsche-museum-3
²=
com.blenheimsi
³=
com.blenkov.www/page/media/18/34/376
´=
com.blentwell.www/bookmarks.php/jackroldan/sp
¸=
com.blentwell.www/tags.php/I

文件大小以千兆字节为单位。说大约 250 GB 的文件大小。

我试图反转文件中的单词并仅从文本中提取域。我尝试使用 Ubuntu OS 终端命令来实现它。 让我告诉你我的尝试:

首先我使用以下命令删除了“/”之后的数据:

~$ ex -sc '%s/\(\/\).*/\1/ | x' newfile.txt > ddm.txt

结果为:

com.blendtuts/
 °=
com.blengineering.www/
±=
com.blenheimgang.www/
²=
com.blenheimsi
³=
com.blenkov.www/
´=
com.blentwell.www/
¸=
com.blentwell.www/

现在我使用来自How to reverse all the words in a file with bash in Ubuntu?的解决方案反转了文件中的完整文本

得到以下结果:

    /blendtuts.com
    °= /www.blengineering.com
    ±= /www.blenheimgang.com
    ²= blenheimsi.com
    ³= /www.blenkov.com
    µ=  /www.blentwell.com
    ¶=  /www.blentwell.com
    •=  /www.blentwell.com

/www.blentwell.com

但问题仍然没有解决。我想知道如何使用 Ubuntu 提取 URL 并将它们放入另一个文件中。正如您在输出上方看到的那样,我仍然拥有的不是域,它有一个反斜杠。

如果使用任何其他操作系统可以解决此类问题,请告诉我。我更喜欢使用 Ubuntu。

我想从文件中提取域并将它们分开到另一个文件中,并且也以适当的格式。

如果我获得了唯一域,那么它将是我查询的绝佳解决方案。否则,我将命令用作:

$ sort filename.txt | uniq > save_to_file.txt

希望听到解决方案。
请检查这里是示例文件:Sample File

【问题讨论】:

  • 您能否为示例输入添加完整的预期输出,以便清晰显示,包括像 sort/uniq 这样的后处理
  • @Sundeep 我想我的问题很清楚。不过,如果您愿意,让我告诉您,我有一个包含反向格式域名的文件,后跟斜杠甚至一些不需要的字符。只想以适当的格式提取域并将其保存在另一个文件中。希望这能帮助你理解。
  • 拥有完整的预期输出有助于测试以及清除文本中所写的内容......我还看到它带来了书面中未提及或被忽视的内容......
  • 为什么有人在没有指定任何理由的情况下投反对票。我不明白反对票背后的原因..

标签: linux bash ubuntu command-line command-prompt


【解决方案1】:

请考虑以下方面的域提取和还原:

awk -F '/' '/com\./ {split($1, arr, /\W+/, seps); for (i=length(arr); i>=1; i--){s = s seps[i] arr[i];} print s ; s="";}'

【讨论】:

  • 使用你的代码我遇到了一个错误,说:'awk:第 1 行:在或附近出现语法错误,awk:第 1 行:对数组 arr 的非法引用 awk:1:意外字符'。 ' 请再次检查您的代码。
  • 我在 RHEL 7.1 上的 bash 和 tcsh 中检查了它,没有发现任何问题。请展示你如何使用它
  • 我使用的是 Ubuntu 16.04 64 位系统,只是在终端上复制粘贴你的命令。
  • 您的命令不起作用。请检查并告诉我。我仍然遇到同样的错误。如果我这边有任何问题,请告诉我。
  • @JafferWilson 你的 awk 版本是什么?此命令适用于GNU Awk 4.1.3
【解决方案2】:
  1. 删除无效条目,通常我们对以 ASCII 字符开头并以字符 '=' 结尾的行不感兴趣
  2. 我们对 URL 之前的第一个感兴趣 /
  3. 反转网址

我已经在您的内容上尝试了以下命令,该命令提供了 URL 列表

cat -v filename.txt | grep -v '^M-.=' | awk -F '/' '{print $1}' | awk -F '.' 'BEGIN{ORS="";}{ for (i=NF; i>0; i--) if ( i == 1 ) { print $i } else { print $i".";} print "\n"; }'

输出

www.blendschutzrollo.com

blendtuts.com

www.blengineering.com

www.blenheimgang.com

.

.

.

【讨论】:

    【解决方案3】:

    我得到了这个答案:

    $ perl -F/ -anle 'print reverse(split("([^.]*)", $F[0])) if /\./' file_name.txt
    

    可以参考:https://askubuntu.com/questions/847307/how-to-do-this-in-a-single-command-on-ubuntu-16-04

    【讨论】:

    • 也可以使用perl -F/ -lane 'print reverse split /(\.)/, $F[0] if /\./'
    猜你喜欢
    • 2013-07-19
    • 2012-07-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2023-03-14
    • 2014-09-11
    相关资源
    最近更新 更多