2016-03-02 88 views
0

我有幾個字符串是「,」分隔的。我需要搜索並根據匹配的字段替換字符串。例如。if語句基於字符串字段

字符串是:

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

我需要編寫一個腳本,它會搜索並根據現場數代替線4

插圖:(須藤代碼)

if [Field4==CRBT] 

更新line1爲:

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

如果[字段4 == 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腳本。

+0

我想這樣的事情: 因爲我在/tmp/subs.txt 做 切-d,-f 2,4 $ I> /tmp/subs1.txt 做 同時讀取線 做 如果[「$ {域[ 4]}「=」CRBT「]] string =」,ACT,DEFAULT,1,0,SYSTEM,2016-03-02 00:00:00「 string =」$ line $ {string}「 echo $字符串>>「/tmp/subs2.txt」 done <「/tmp/subs1.txt」 –

回答

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 
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 
+1

您*可能*需要'$ {fields [3]}'代替;從問題不清楚OP是從0還是1開始,並且示例輸入在兩個相鄰列中具有相同的值。 – chepner

+0

當所有的規則都與field4相關時,我會建議'case「$ {fields [4]}」。 –

+0

@chepner是字段3和4是相同的。我們可以採取任何。 >> OP開始於0或1 要求就像是,如果字段3或4在給定的字符串中匹配,它只是用所需的輸出替換整行。 –