Возвратить несколько значений из awk

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Tankiro
Сообщения: 23

Возвратить несколько значений из awk

Сообщение Tankiro » 16.03.2016 14:13

Подскажите, как присвоить переменным в bash нескольких значений из awk?

команды bash
awk '{print $6,$5}'
команды bash

Как присвоить значение столбцов 2-м переменным, что-то типа z1=$6, z2=$5
Спасибо сказали:

Аватара пользователя
nerve
Сообщения: 267
ОС: OpenBSD

Re: Возвратить несколько значений из awk

Сообщение nerve » 16.03.2016 14:18

z1=`awk '{print $5}' file`
z2=`awk '{print $6}' file`
или
z1=$(awk '{print $5}' file)
но со столбцами могут быть проблемы, возможно там окажутся только значения первой строки.
Спасибо сказали:

Tankiro
Сообщения: 23

Re: Возвратить несколько значений из awk

Сообщение Tankiro » 16.03.2016 14:20

дело в том, что awk выполняется на удаленной машине.... А если таких значений несколько, а если несколько тысяч.... хотелось бы сделать все одной командой
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Возвратить несколько значений из awk

Сообщение NickLion » 16.03.2016 14:27

Tankiro
Несколько тысяч — это задача для цикла, а не нескольких тысяч переменных.
Спасибо сказали:

Аватара пользователя
s.xbatob
Сообщения: 807
ОС: Fedora

Re: Возвратить несколько значений из awk

Сообщение s.xbatob » 16.03.2016 14:27

откройте для себя массивы:

Код: Выделить всё

var=( $(awk '{print $6,$5}') )
echo ${var[0]} ${var[1]}
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Возвратить несколько значений из awk

Сообщение NickLion » 16.03.2016 14:34

nerve писал(а):
16.03.2016 14:18
z1=`awk '{print $5}' file`
z2=`awk '{print $6}' file`
или
z1=$(awk '{print $5}' file)
но со столбцами могут быть проблемы, возможно там окажутся только значения первой строки.

Почему только первой, просто массив будет:

for i in $(echo -e 'q w e r t y\na s d f g h' | awk '{print $5}'); do echo "<$i>"; done

<t> <g>

Спасибо сказали:

Tankiro
Сообщения: 23

Re: Возвратить несколько значений из awk

Сообщение Tankiro » 16.03.2016 14:54

var=( $(awk '{print $6,$5}') )
echo ${var[0]}

При выводе echo ${var[0]} выводит сразу два значения $6 и $5 а ${var[1]} - пуст ((
Спасибо сказали:

Аватара пользователя
nerve
Сообщения: 267
ОС: OpenBSD

Re: Возвратить несколько значений из awk

Сообщение nerve » 16.03.2016 15:01

Shell

$ cat file.1 1 2 5 1 2 5 1 2 5 3 4 5 3 4 5 3 4 5 $ cat awk.sh #!/bin/bash i=0 for f in 1 2 3 do func () { awk -v col=$f '{print $col}' file.1 } echo z$f=$(func) done $ ./awk.sh z1=1 1 1 3 3 3 z2=2 2 2 4 4 4 z3=5 5 5 5 5 5

Спасибо сказали:

Аватара пользователя
s.xbatob
Сообщения: 807
ОС: Fedora

Re: Возвратить несколько значений из awk

Сообщение s.xbatob » 16.03.2016 15:13

Tankiro писал(а):
16.03.2016 14:54
var=( $(awk '{print $6,$5}') )
echo ${var[0]}

При выводе echo ${var[0]} выводит сразу два значения $6 и $5 а ${var[1]} - пуст ((

а у вас bash?

Код: Выделить всё

[xbatob@Aries ~]$ rpm -q bash
bash-4.3.42-3.fc22.x86_64
[xbatob@Aries ~]$ v4=( $(awk '{print $6,$5}') )
1 2 3 4 5 6 7 8 9 0
[xbatob@Aries ~]$ echo $v4
6
[xbatob@Aries ~]$ echo ${v4[1]}
5
[xbatob@Aries ~]$
Спасибо сказали:

Tankiro
Сообщения: 23

Re: Возвратить несколько значений из awk

Сообщение Tankiro » 16.03.2016 15:20

s.xbatob писал(а):
16.03.2016 15:13
Tankiro писал(а):
16.03.2016 14:54
var=( $(awk '{print $6,$5}') )
echo ${var[0]}

При выводе echo ${var[0]} выводит сразу два значения $6 и $5 а ${var[1]} - пуст ((

а у вас bash?

Код: Выделить всё

[xbatob@Aries ~]$ rpm -q bash
bash-4.3.42-3.fc22.x86_64
[xbatob@Aries ~]$ v4=( $(awk '{print $6,$5}') )
1 2 3 4 5 6 7 8 9 0
[xbatob@Aries ~]$ echo $v4
6
[xbatob@Aries ~]$ echo ${v4[1]}
5
[xbatob@Aries ~]$



да, bash

Tankiro писал(а):
16.03.2016 15:20
s.xbatob писал(а):
16.03.2016 15:13
Tankiro писал(а):
16.03.2016 14:54
var=( $(awk '{print $6,$5}') )
echo ${var[0]}

При выводе echo ${var[0]} выводит сразу два значения $6 и $5 а ${var[1]} - пуст ((

а у вас bash?

Код: Выделить всё

[xbatob@Aries ~]$ rpm -q bash
bash-4.3.42-3.fc22.x86_64
[xbatob@Aries ~]$ v4=( $(awk '{print $6,$5}') )
1 2 3 4 5 6 7 8 9 0
[xbatob@Aries ~]$ echo $v4
6
[xbatob@Aries ~]$ echo ${v4[1]}
5
[xbatob@Aries ~]$



да, bash


Оригинальная строка такая
var=$(ssh root@$IP ls --full-time -h $BPATH/stor-$DAT.tar | awk '{print $6,$5}')
Спасибо сказали: