if语句基于字符串字段

时间:2016-03-02 10:15:32

标签: linux bash shell if-statement

我的字符串是","分离。我需要根据匹配的字段搜索和替换字符串。对于例如。

字符串是:

MUMBAI,918889986665,POSTPAID,CRBT,CRBT,SYSTEM,151004,MONTHLY,160201,160302
MUMBAI,912398456781,POSTPAID,SEGP30,SEGP30,SMS,151004,MONTHLY,160201,160302

我需要编写一个脚本,它将根据字段编号4搜索和替换这些行。

插图:( sudo代码)

if [Field4==CRBT]

将line1更新为:

 8889986665,ACT,DEFAULT,1,0,SYSTEM,2016-03-02 00:00:00

如果[Field4 == SEGP30]

将第2行更新为:

   2398456781,ACT,SEGP30_0,3,0,SMS,2015-03-02 00:00:00

在完成所有比较后,所需的输出应为:

 8889986665,ACT,DEFAULT,1,0,SYSTEM,2016-03-02 00:00:00
 2398456781,ACT,SEGP30_0,3,0,SMS,2015-03-02 00:00:00

请帮助我使用shell脚本。

2 个答案:

答案 0 :(得分:0)

创建一个名为keydata的文件,以便像这样存储if/else映射(由管道分隔):

CRBT|8889986665,ACT,DEFAULT,1,0,SYSTEM,2016-03-02 00:00:00
SEGP30|2398456781,ACT,SEGP30_0,3,0,SMS,2015-03-02 00:00:00

然后使用这个awk命令:

awk 'FNR==NR{a[$1]=$2; next} $4 in a{$0=a[$4]} 1' FS="|" keydata FS="," file

8889986665,ACT,DEFAULT,1,0,SYSTEM,2016-03-02 00:00:00
2398456781,ACT,SEGP30_0,3,0,SMS,2015-03-02 00:00:00

答案 1 :(得分:0)

read和数组:

非常简单
while IFS=, read -ra fields
do
    if [[ "${fields[4]}" = "CRBT" ]]
    then
        echo "do something"
    elif [[ "${fields[4]}" = "SEGP30" ]]
    then
        echo "do something else"
    fi
done