シェルスクリプトを使用したテキストファイルの処理とコマンドの生成

シェルスクリプトを使用したテキストファイルの処理とコマンドの生成

次のように、サーバーとドメイン名を含むファイルがあります。

名前.txt:

ABCDomain ContractABCServer_1
ABCDomain ABC_server1
LinkDomain CoreLinkServer_1
TADDomain TADServer_1

(他のファイルに対してソートと独自の操作を実行した後、上記のファイルを取得しました。)---

上記のファイルから値を抽出し、xyzコマンド(サーバーを再起動するために使用されます)に次の形式の引数として渡す必要があります。

出力:

"ABCDomain(server:ContractABCServer_1,server:ABC_server1)","LinkDomain(server:CoreLinkServer_1)","TADDomain(TADServer_1)"

以下に説明するロジックを使用していますが、各コレクションのドメイン名は一度だけ表示される必要があるため、目的の出力は提供されません。私も同じラインを維持するのが難しいです。

- - - - - - -スタート- - -

    DOMAIN=''

IFS=' '
while read line
do
        DOMAIN=$(echo "$line" | awk -F " " '{print $1}')

        for word in $line
        do
                if [[ "$word" == "$DOMAIN" ]]; then
                        Server=$(echo "$line" | awk -F " " '{print $2}' )
                        echo -n "(server:$ServerName"
                fi

        done

done < Names.txt

ベストアンサー1

{
    if (dom[$1]) 
        dom[$1]=dom[$1]","$2
    else 
        dom[$1]=$2
} 

END {
    ORS=",";
    for (d in dom)
        if (d)
            print ("\""d"(server:"dom[d]")""\"")
}

高速で汚れたawkソリューションは次のとおりです。 Something.awkとして保存し、以下を実行します。

awk -f something.awk Names.txt 

あなたの質問に答えるためのクイックフィックスコメント:

{ dom[$1]=dom[$1] ? dom[$1]",server:"$2 : "server:"$2 }

END {
    for (d in dom)
        if (d) {
            out && out = out","
            out = out"\""d"("dom[d]")""\""
        }
        print out
}

おすすめ記事