问题描述
我对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 (将#修改为@)