var1='"name" : "John", "name" : "Ron", "name": "Mary"'
$var1 | tr -d '",' | awk '{print $2}'
上面的代码给出了o / p:
John
Ron
Mary
现在,我想阅读以上每个名称,并在其他命令中使用它。例如:
$var1 | tr -d '",' | awk '{print $2}' | { read -r student_name; ./redis-cli -c -h <redis hostname> -p 9443 hmset school:student:student_name rollno $roll_no; }
如何获取每个名称并将它们传递给上面显示的redis命令? 上面的bash脚本仅采用名字“ John”,并将其传递给redis命令。传递“ John”之后,我还希望它将下一个学生姓名传递给redis,依此类推。
在此示例中,我仅使用了3个名称,但可能有数百个。一切都需要在一行脚本中完成。
答案 0 :(得分:2)
拥有read
时为什么要完全使用awk
。
如果这是输入(最后一个:
之前的空格)
var1=""name" : "John", "name" : "Ron", "name" : "Mary""
您可以执行以下操作:
echo $var1 | awk -F: '{print "Hello" $2}' RS=,
Hello John
Hello Ron
Hello Mary
这会将记录选择器设置为,
,将字段分隔符设置为:
,然后打印前面带有hello
的每条记录。
如果数据相反:
var1='"name" : "John", "name" : "Ron", "name" : "Mary"'
echo $var1
"name" : "John", "name" : "Ron", "name" : "Mary"
那你应该做:
echo $var1 | awk -F: '{split($2,a,"\"");print "Hello",a[2]}' RS=,
Hello John
Hello Ron
Hello Mary