linux - 基于字符串字段的 if 语句

标签 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]

将第 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/

相关文章:

linux - shell 脚本只查找最近 n 分钟内创建的所有文件夹的列表

php - 在Linux中安全地从PHP运行python脚本

bash - 使用 Perl、sed、awk 替换多行模式

python - 如何在 Mac 上的 python 脚本中删除 bash 历史记录?

azure - 如何将 azure 文件共享挂载到 Linux 虚拟机上的现有目录

c - vfork() 与 gcc -O2 似乎有错误的结果。

java - Unix 脚本中的 JSTAT 无法正常工作

linux - 您可以使用 sed 删除匹配项和之后的某些行吗?

Linux shell 计算 key 的简单方法

shell - Emacs 口齿不清 : is it possible (using lisp) to run command in an eshell working in other buffer?