如何使用awk并在bash脚本中一起阅读?

时间:2019-06-03 02:33:03

标签: bash awk

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个名称,但可能有数百个。一切都需要在一行脚本中完成。

1 个答案:

答案 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