Как использовать awk и читать вместе в bash-скрипте? - PullRequest
0 голосов
/ 03 июня 2019
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 принимает только имя «Джон» и передает его команде redis. После передачи слова «Джон» я также хочу, чтобы имя следующего ученика передавалось в Redis и так далее.

В этом примере я использовал только 3 имени, но их могло быть сотни. Все должно быть сделано в одной строке сценария.

1 Ответ

2 голосов
/ 03 июня 2019

Зачем вообще использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...