URLのリスト(1行に1つのエントリ)を含むファイルがあります。
ホスト(サーバー)名を抽出するために、以下のスクリプト(正しく実行)を使用して処理した後、入力に複数回表示されるホスト名が、表示された出力に複数回表示されます。各名前が一度だけ現れることを望みます。私は努力しましたが、uniq
役に立ちませsort -u
んでした。以下は、ホストの抽出に使用するコードです。
function extract_parts {
if [ -f "wget-list" ]; then
while read a; do
a=${a:8}
host=$(echo -e "$a" | awk -F '/' '{print $1}' | sort -u)
# host=$(echo -e "$a" | awk -F '/' '{print $1}' | uniq -iu)
echo -e ${host}
done <<< $(cat ./wget-list)
fi
}
これには以下がwget-list
含まれます(切り捨てられた例)。
https://downloads.sourceforge.net/tcl/tcl8.6.12-html.tar.gz
https://downloads.sourceforge.net/tcl/tcl8.6.12-src.tar.gz
https://files.pythonhosted.org/packages/source/J/Jinja2/Jinja2-3.1.2.tar.gz
https://files.pythonhosted.org/packages/source/M/MarkupSafe/MarkupSafe-2.1.1.tar.gz
https://ftp.gnu.org/gnu/autoconf/autoconf-2.71.tar.xz
https://ftp.gnu.org/gnu/automake/automake-1.16.5.tar.xz
スクリプト以降の結果(ホストのみ、いいえ、https://
パス部分):
downloads.sourceforge.net
downloads.sourceforge.net
files.pythonhosted.org
files.pythonhosted.org
ftp.gnu.org
ftp.gnu.org
希望の出力(上記ですが繰り返さない):
downloads.sourceforge.net
files.pythonhosted.org
ftp.gnu.org
ベストアンサー1
while read a; do
あなたは一行を読んでいます...
host=$(echo -e "$a" | awk -F '/' '{print $1}' | sort -u)
パイプに印刷し、パイプを並べ替え、パイプから一意の行を取得します。これはあなたにユニークなパスを提供します。
その後、完全に分離された次の行でも同じことを行います。
代わりにファイル全体をパイプするだけです。
$ < ./wget-list sed -e 's,^https://,,' | awk -F/ '{print $1}' |sort -u
downloads.sourceforge.net
files.pythonhosted.org
ftp.gnu.org