1

私はこのファイルを持っています:

CLUSTERS=SP1,SP2,SP3

FNAME_SP1="REWARDS_BTS_SP1_<GTS>.dat"
FNAME_SP2="DUMP_LOG_SP2_<GTS>.dat"
FNAME_SP3="TEST_CASE_TABLE_SP3_<GTS>.dat"

これらから得たいものは次のとおりです。

REWARDS_BTS_SP1_
DUMP_LOG_SP2_
TEST_CASE_TABLE_SP3_

CLUSTERSフィールドをループして値を取得し、それを使用して適切なFNAME_<CLUSTERNAME>値を見つけます。基本的に、CLUSTERS値は常に文字列の_<GTS>部分の前にあります。CLUSTERS値が文字列の最後の_<GTS>の前にある場合は、任意の文字列パターンで問題ありません。

助言がありますか?これがスクリプトの一部です。

    function loadClusters() {
        for i in `echo ${!CLUSTER*}`
        do
            CLUSTER=`echo ${i} | grep $1`
            if [[ -n ${CLUSTER} ]]; then
                CLUSTER=${!i}
                break;
            fi
        done

        echo -e ${CLUSTER}
    }

    function loadClustersCampaign() {
        for i in `echo ${!BPOINTS*}`
            do
                BPOINTS=`echo ${i} | grep $1`
                if [[ -n ${BPOINTS} ]]; then
                    BPOINTS=${!i}
                    break;
                fi
        done

        for i in `echo ${!FNAME*}`
            do
                FNAME=`echo ${i} | grep $1`
                if [[ -n ${FNAME} ]]; then
                    FNAME=${!i}
                    break;
                fi
        done

        echo -e ${BPOINTS}"|"${FNAME}
    }

    #get clusters
    clusters=$(loadClusters $1)

    for i in `echo $clusters | sed 's/,/ /g'`
        do
            file=$(loadClustersCampaign ${i/-/_} | awk -F"|" '{print $2}') ;

            echo $file;

            #then get the part of the $file variable
        done
4

2 に答える 2

3

シェル パラメータの展開を楽しむ

マッチングプレフィックス表記と間接展開を使用して必要な変数を取得し、各結果で「サフィックスの削除」展開を使用して、ファイル名の必要な部分だけを収集できます。例えば:

FNAME_SP1='REWARDS_BTS_SP1_<GTS>.dat'
FNAME_SP2='DUMP_LOG_SP2_<GTS>.dat'
FNAME_SP3='TEST_CASE_TABLE_SP3_<GTS>.dat'

for cluster in "${!FNAME_SP@}"; do
    echo ${!cluster%%<GTS>*}
done

これにより、次のように出力されます。

REWARDS_BTS_SP1_
DUMP_LOG_SP2_
TEST_CASE_TABLE_SP3_

ただし、echo を使用する代わりに、ループ内で任意の有効なシェル コマンドを発行できます。

関連項目

http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

于 2012-07-27T09:16:10.243 に答える
0

このための awk ソリューションが必要な場合は、以下が役立つ場合があります。

> echo 'FNAME_SP1="REWARDS_BTS_SP1_<GTS>.dat"' | awk -F"<GTS>" '{split($1,a,"=\"");print substr(a[2],2)}'
REWARDS_BTS_SP1_

以下にさらに詳細を示します。

> cat temp
LUSTERS=SP1,SP2,SP3

    FNAME_SP1="REWARDS_BTS_SP1_<GTS>.dat"
    FNAME_SP2="DUMP_LOG_SP2_<GTS>.dat"
    FNAME_SP3="TEST_CASE_TABLE_SP3_<GTS>.dat"

> awk -F"<GTS>" '/FNAME_SP/{split($1,a,"=");print substr(a[2],2)}' temp
REWARDS_BTS_SP1_
DUMP_LOG_SP2_
TEST_CASE_TABLE_SP3_
>
于 2012-07-27T09:23:19.477 に答える