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_

但是您可以在循环内发出任何有效的 shell 命令,而不是使用 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 回答