我有几个以“,”分隔的字符串。我需要根据匹配的字段搜索和替换字符串。对于例如。
字符串是:
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]
将第 1 行更新为:
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 脚本。
最佳答案
创建一个名为 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
关于linux - 基于字符串字段的 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35744222/