Здравствуйте. Есть 2 файла:
cat attribute.txt
6647|Вид обуви|кеды
6646|Страна бренда|Россия
6645|Страна пошива|Россия
6645|Страна бренда|Россия
6646|Вид обуви|ботинки
...
и
cat product.txt
6645|значение3|значение4
6646|значение1|значение2
6647|значение5|значение6
В первом в хаотичном порядке перечислены названия атрибутов и их значения для различных товаров (id товара в 1 столбце). Во втором - собственно сами товары, где 1 товару соответствует 1 строка. скриптом собираю файл, в котором хаотичные атрибуты будут упорядочены по определенным столбцам второго файла в виде |Имя атрибута|Значение атрибута|. Если нет атрибута для товара - то пустое значение. Вот так, для вышеописанного примера:
6645|значение3|значение4|Страна пошива|Россия|Страна бренда|Россия|||
6646|значение1|значение2|||Страна бренда|Вид обуви|ботинки
6647|значение5|значение6|||||Вид обуви|кеды
Видов атрибутов в attribute.txt - много, в product.txt нужно поместить 10 из них, указанные в переменных в начале скрипта
Сделал скрипт:
#!/bin/bash
attribute=attribute.csv
product=product.csv
atr1='Страна пошива'
atr2='Страна бренда'
atr3='Вид обуви'
atr4='...'
atr5='...'
atr6='...'
atr7='...'
atr8='...'
atr9='...'
atr10='...'
awk -F "|" -v attribute=$attribute -v atr1=$atr1 '
BEGIN {OFS="|";
while(getline < attribute) {
name[$1]=$2;
value[$1]=$3
}
};
$2 == atr1 {
$40=name[$1];
$41=value[$1]
};
{ print $1 "|" $2 "|" $3 "|" $40 "|" $41 }' $product > temp01
...
и так еще 8 awk
...
awk -F "|" -v attribute=$attribute -v atr10=$atr10 '
BEGIN {OFS="|";
while(getline < attribute) {
name[$1]=$2;
value[$1]=$3
}
};
$2 == atr10 {
$40=name[$1];
$41=value[$1]
};
{ print $1 "|" $2 "|" $3 "|" .... "|" $21 "|" $22 "|" $40 "|" $41 }' temp10 > $product
Такое решение работает, но очевидно, что оно не оптимально. Можно ли это сделать одним awk, а не 10?