#1 09.04.2014 09:36:53

EvgeniusDragon
Administrator
Зарегистрирован: 16.11.2011
Сообщений: 116
IP-адрес

Нужно соотнести и объединить слова между двумя переменными. (bash)

Нужно сделать скрипт что бы соединял слова из разных переменных. Не знаю как правильно объяснить, но вот пример как нужно

var1="1 2 3 4 5 6"
var2="a b c d e f"


в итоге нужно получить что то типа
1 = a
2 = b
3 = c
4 = d
5 = e
6 = f


Для чего мне нужно такое? Есть сайт к примеру. На нем страницы с фотками. Но над каждой фоткой есть заголовок. Фотки со страниц я могу скачать все. Но нужно еще и дать имя фоткам соответствующее заголовку. И у меня есть переменная линка фотки и переменная имени. И в переменной линки идут в одной строке через пробел, как и имена фоток. И если я могу объединить линк и имя, то могу передать в wget линк и имя сохраняемого файла.

#2 09.04.2014 11:05:31

Vascom
Administrator
Зарегистрирован: 02.04.2010
Сообщений: 4 019
IP-адрес

Нужно соотнести и объединить слова между двумя переменными. (bash)

Можно данные из переменных переместить в массивы (http://www.opennet.ru/docs/RUS/bash_scripting_guide/c12790.html) и далее уже сопоставлять соответствующие элементы массивов.
Так же можно в цикле через cut -d " " -f1 и cut -d " " -f2 выделять соответствующие элементы прямо из переменных.

#3 09.04.2014 11:21:35

EvgeniusDragon
Administrator
Зарегистрирован: 16.11.2011
Сообщений: 116
IP-адрес

Нужно соотнести и объединить слова между двумя переменными. (bash)

О! Спасибо. Думаю то что нужно.

#4 09.04.2014 11:45:13

Vascom
Administrator
Зарегистрирован: 02.04.2010
Сообщений: 4 019
IP-адрес

Нужно соотнести и объединить слова между двумя переменными. (bash)

А можно и через awk, в общем дальше уже твой полёт фантазии должен работать :)

#5 09.04.2014 18:26:12

sdgfgffgfdfdgf
Administrator
Зарегистрирован: 09.04.2014
Сообщений: 2
IP-адрес

Нужно соотнести и объединить слова между двумя переменными. (bash)

#!/usr/bin/perl -w
use strict;   #чтоб при неуловимых косяках программа подсказывала

my $a = "a b c d e f g";     #тут понятно
my $b = "1 2 3 4 5 6 7";   #тут тоже

my @a = split /\s+/, $a;   # загоняем в массив, разделитель любой пробельный символ, один или более раз подряд
my @b = split /\s+/, $b;   # то же самое


for (my $i = 0; $i < @a; $i++){   #цикл кол-во раз == количеству элементов, так как @a в скалярном контексте возвращает число элементов
    print "$a[$i] => $b[$i];
}




a => 1
b => 2
c => 3
d => 4
e => 5
f => 6
g => 7

теперь перепишите на bash и будет Вам счастье.
тут необходимое условие, как следствие из условия задачи.
нужно чтоб количество элементов в массивах совпадало.
либо можно сделать проверку, типа
if (@a == @b){
    #some code
}

хотя странноватая задача, разве нельзя из sql вытащить сразу два значения? (ссылку и имя)
несортирован, ибо хеш, но оно Вам и не нужно, на сколько я понял.
теперь сортирован и без хеша

#6 09.04.2014 18:34:14

EvgeniusDragon
Administrator
Зарегистрирован: 16.11.2011
Сообщений: 116
IP-адрес

Нужно соотнести и объединить слова между двумя переменными. (bash)


несортирован, ибо хеш, но оно Вам и не нужно, на сколько я понял.


Да. Спасибо. Это тоже сойдет.

#7 14.04.2014 03:50:50

drBatty
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 17 053
IP-адрес

Нужно соотнести и объединить слова между двумя переменными. (bash)

[console]$ cat f1
1
2
3
4
5
6
$ cat f2
a
b
n
d
e
f
$ paste -d= f1 f2
1=a
2=b
3=n
4=d
5=e
6=f
[/console]

#8 16.12.2014 20:23:16

ysechynskyy
Administrator
Зарегистрирован: 16.12.2014
Сообщений: 1
IP-адрес

Нужно соотнести и объединить слова между двумя переменными. (bash)

Можно через массив

#!/bin/bash

VAR1=(g h j k l m)
VAR2=(a b c d e f)

for i in ${!VAR1[*]} 
do
#echo $i

echo ${VAR1['i']} "= "${VAR2['i']}  
done


или



echo ${VAR1[$i]} "= "${VAR2[$i]} 



В вашем случае нужно перевести переменную в массив
Переводим переменную в массив:

VAR1="g h j k l m"
VAR2="a b c d e f"

в

VAR1=(g h j k l m)
VAR2=(a b c d e f)

так


VAR1="g h j k l m"
VAR2="a b c d e f"
VARA1=($VAR1)
VARA2=($VAR2)

и того скрипт

#!/bin/bash

VAR1="g h j k l m"
VAR2="a b c d e f"
VARA1=($VAR1)
VARA2=($VAR2)
    
#echo $VARA1

for i in ${!VARA1[*]} 
do

echo ${VARA1['i']} "= "${VARA2['i']}
done


#9 17.12.2014 13:44:15

1000Mhz
Administrator
Зарегистрирован: 17.08.2014
Сообщений: 816
IP-адрес

Нужно соотнести и объединить слова между двумя переменными. (bash)

Для парсинга сайтов лучше использовать специализированные инструменты, например xidel, но уж никак не wget.

#10 20.12.2014 14:49:01

drBatty
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 17 053
IP-адрес

Нужно соотнести и объединить слова между двумя переменными. (bash)

1000Mhz, я не сомневаюсь, что в гугле вас забанили, потому: http://lurkmore.to/4.2

Да и вообще вы со своими репликами не к месту. Wget для парсинга тут никто не использует. Это вообще КАК?

PS: и да, использовать для X специальный костыль Y, это маздайно, не юниксвейно, не Ъ, и вообще No Way.

Board footer