У меня проблема с одним сегментом следующего скрипта. Каждый echo-> grep-> был написан, чтобы помочь мне понять, где скрипт не работал, как я ожидаю. Он предназначен для того, чтобы быть частью большей петли, но для здравомыслия у меня есть только та часть, которая имеет отношение к моему вопросу.
У меня есть файлы в /var/www/acpog/upload
с именем 0SCAN2013
за которым следует остальная часть даты (ГГГГММДДЧЧммСС)
И файл ./alt_upcs.csv
имеет 2 столбца, один из которых sku (1419), второй - UPC (9781844484201)
Если я не могу найти соответствие в /var/www/acpog/uploads/
для sku, я хочу попытаться найти соответствие для UPC. Если это не удается, я хочу попытаться найти совпадение для sku с нулями с левой стороны.
Вот фрагмент:
st="0"
id="1419"
sd="SCAN2013"
echo "grep \"^$id,\" /var/www/acpog/upload/$st$sd* | cut -d',' -f 4-5 | tail -1"
grep "^$id," /var/www/acpog/upload/$st$sd* | cut -d',' -f 4-5 | tail -1
dt=$(grep "^$id," /var/www/acpog/upload/$st$sd* | cut -d',' -f 4-5 | tail -1)
if [ "$dt" == "" ]
then
echo "grep \"^$id,\" alt_upcs.csv | cut -d',' -f 2"
grep "^$id," alt_upcs.csv | cut -d',' -f 2
u=$(grep "^$id," alt_upcs.csv | cut -d',' -f 2)
for j in $(grep "^$id," alt_upcs.csv | cut -d',' -f 2)
do
if [ "$dt" == "" ]
then
echo "grep \"^$j,\" /var/www/acpog/upload/$st$sd* | cut -d',' -f 4-5 | tail -1"
grep "$j" /var/www/acpog/upload/$st$sd* | cut -d',' -f 4-5 | tail -1
dt=$(grep $j /var/www/acpog/upload/$st$sd* | cut -d',' -f 4-5 | tail -1)
fi
done
fi
if [ "$dt" == "" ]
then
echo "grep \"^0$id,\" /var/www/acpog/upload/$st$sd* | cut -d',' -f 4-5 | tail -1"
grep "^0$id," /var/www/acpog/upload/$st$sd* | cut -d',' -f 4-5 | tail -1
dt=$(grep "^0$id," /var/www/acpog/upload/$st$sd* | cut -d',' -f 4-5 | tail -1)
fi
и вот вывод:
grep "^1419," /var/www/acpog/upload/0SCAN2013* | cut -d',' -f 4-5 | tail -1
grep "^1419," alt_upcs.csv | cut -d',' -f 2
9781844484201
," /var/www/acpog/upload/0SCAN2013* | cut -d',' -f 4-5 | tail -1
grep "^01419," /var/www/acpog/upload/0SCAN2013* | cut -d',' -f 4-5 | tail -1
Строки 1, 2, 3 и 5 соответствуют ожиданиям. В строке 4 нет начала строки, которую я пытаюсь повторить непосредственно перед запятой. Если после этого я выведу переменную $j
, она, как и ожидалось, содержит UPC, но команда grep, использующая эту переменную, тоже ничего не возвращает.
РЕДАКТИРОВАТЬ: Кроме того, есть 4 файла, которые должны соответствовать в каталоге загрузки, все начиная с 0SCAN2013
Вот еще один вывод из запускаемых вручную команд из приглашения:
# echo "grep \"^$j,\" /var/www/acpog/upload/$st$sd* | cut -d',' -f 4-5 | tail -1"
grep "^9781844484201," /var/www/acpog/upload/0SCAN2013* | cut -d',' -f 4-5 | tail -1
# grep $j /var/www/acpog/upload/$st$sd*
/var/www/acpog/upload/0SCAN20130821213905:9781844484201,0,2,8:21,13:48:496
# grep $j /var/www/acpog/upload/$st$sd* | cut -d',' -f 1 | tail -1
/var/www/acpog/upload/4SCAN20130805204626:9781844484201
# grep $j /var/www/acpog/upload/$st$sd* | cut -d',' -f 2 | tail -1
2
# grep $j /var/www/acpog/upload/$st$sd* | cut -d',' -f 3 | tail -1
-1
# grep $j /var/www/acpog/upload/$st$sd* | cut -d',' -f 4-5 | tail -1
8:21,13:48:496
Чтобы проверить, эти файлы должны работать. В каталоге, где находится скрипт: имя файла alt_upcs.csv
содержащее 1 строку:
1419,9781844484201
В /var/www/acpog/upload/
имя файла 0SCAN20130821213905
содержит 1 строку:
9781844484201,0,2,8:21,13:48:496