我的字符串是","分离。我需要根据匹配的字段搜索和替换字符串。对于例如。
字符串是:
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脚本。
答案 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