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

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

Модераторы: /dev/random, Модераторы разделов

Ответить
Tankiro
Сообщения: 23

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

Сообщение Tankiro »

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

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

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

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

Сообщение nerve »

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

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

Сообщение Tankiro »

дело в том, что awk выполняется на удаленной машине.... А если таких значений несколько, а если несколько тысяч.... хотелось бы сделать все одной командой
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

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

Сообщение NickLion »

Tankiro
Несколько тысяч — это задача для цикла, а не нескольких тысяч переменных.
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

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

Сообщение s.xbatob »

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

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

var=( $(awk '{print $6,$5}') )
echo ${var[0]} ${var[1]}
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

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

Сообщение NickLion »

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 »

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

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

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

Сообщение nerve »

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
Сообщения: 1139
ОС: Fedora

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

Сообщение s.xbatob »

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 »

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}')
Спасибо сказали:
Ответить