スクリプトから一意の出力を取得する際に問題があります。

スクリプトから一意の出力を取得する際に問題があります。

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

おすすめ記事