cod*_*der 4 bash shell-script text-processing files patterns
我有一个包含表单 URL 列表的文件
编辑
http://www.google.com/absd/siidfs/kfd837382 $%^$&,
www.google.com,
google.com
yahoo.com/list/page/jhfjkshdjf...
我想编写一个脚本来显示以下输出
google.com : 2
http://www.google.com: 1
yahoo.com : 1
Run Code Online (Sandbox Code Playgroud)
我被困在我必须从文件中读取 URL 并再次检查整个文件的部分。我是 bash 脚本的新手,因此我不知道该怎么做。
假设以下输入格式:
http://www.google.com,
www.google.com,
google.com
yahoo.com
Run Code Online (Sandbox Code Playgroud)
结果如下所示:
google.com : 3
yahoo.com : 1
Run Code Online (Sandbox Code Playgroud)
很难确定您所处的整个情况,但鉴于您向我们展示的输出,我倾向于首先转换输入文件,以便所有行都采用以下形式:
google.com
google.com
google.com
yahoo.com
Run Code Online (Sandbox Code Playgroud)
然后通过以下命令集运行此文件:
$ grep -v "^$" data.txt | \
sed -e 's/,$//' -e 's/.*\.\(.*\)\.\(.*\)$/\1.\2/' | \
sort | uniq -c
3 google.com
1 yahoo.com
Run Code Online (Sandbox Code Playgroud)
您可以清理输出的格式,使其符合您的要求,如下所示:
$ grep -v "^$" data.txt | \
sed -e 's/,$//' -e 's/.*\.\(.*\)\.\(.*\)$/\1.\2/' | \
sort | uniq -c | \
awk '{printf "%s : %s\n", $1, $2}'
google.com : 3
yahoo.com : 1
Run Code Online (Sandbox Code Playgroud)
OP 有一个后续问题,他更改了示例中的输入。所以要计算这种类型的输入:
http://www.google.com/absd/siidfs/kfd837382$%^$&,
www.google.com,
google.com
yahoo.com/list/page/jhfjkshdjf...
Run Code Online (Sandbox Code Playgroud)
您可以使用第一个示例中的这种经过调整的单行:
$ grep -v "^$" data2.txt | \
sed -e 's/,$//' \
-e 's#\(http://[^/]\+\).*#\1#' \
-e '/^[^http]/ s/^www\.//' \
-e '/^[^http]/ s#\([^/]\+\).*$#\1#' | \
sort | uniq -c | \
awk '{printf "%s : %s\n", $1, $2}'
2 : google.com
1 : http://www.google.com
1 : yahoo.com
Run Code Online (Sandbox Code Playgroud)