如何检查AWK脚本中的字符串数组是否包含值

问题描述

我对awk来说还很陌生,我正在尝试修改现有脚本,这是我的要求- 从命令行提供一个字符串参数,例如-“ abcd | efgh | ijkl”(我可以使用-v做到这一点), 将其拆分为一个字符串数组,例如-{“ abcd”,“ efgh”,“ ijkl”)。 从文件中读取值,并且如果特定字符串与拆分数组中的值之一匹配(该值将为键-值对ex-abcd:789), 然后将其替换并写入输出文件中。(在输出文件中,我需要具有“ abcd 123”) 对于其他行,如果键与我的数组中的任何值都不匹配(例如“ xyz:456”),我想打印实际值(“ xyz 456”) 这是我得到分割数组的方式-

awk -v mystring="$5" 'BEGIN {
  print mystring ; //prints abcd|efgh|ijkl
  split(mystring,mylistDictionary,"|"); //splitting
  for (i in mylistDictionary) uniqueKeys[mylistDictionary[i]] = "" //* currently unused
  print "1-",mylistDictionary[1]; // prints abcd
  print "2-",mylistDictionary[2]; // prints efgh
}
.
.
.
function writeLine(line) {
  split(line,linetokens,"="); // the line will be something like abcd = ewiubqq
  for(x in mylistDictionary) {if(x==linetokens[1]){ tmp="123"; print linetokens[1],tmp; } };
  print(line)
 }

我能够在for循环中打印linetokens[1]的值,并且我也能够打印数组的所有值(如果我将print x;替换为if块 但是,当我尝试比较两个值if(x==linetokens[1])时,条件永远不会成立,因此无法更改tmp的值。

我知道awk数组是关联的,因此基于一些答案,试图将其转换为以值作为键的数组,这是注释中与*所在的行,但是使用它也不会不行。

样本输入-

key1 = value1
key2 = value2
key3 = value3
key1 = value4

命令行arg- "key1|key2|key8"

预期输出-

key1 = 123
key2 = 123
key3 = value3
key1 = 123

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)