Estou tendo um problema com um segmento do script a seguir. Cada echo- > grep- > foi escrito para me ajudar a descobrir onde o script estava falhando como eu esperava. Ele é projetado para fazer parte de um loop maior, mas para sanidade, eu tenho aqui apenas a parte que é relevante para a minha pergunta.
Eu tenho arquivos em /var/www/acpog/upload
que são nomeados 0SCAN2013
seguidos pelo restante da data (YYYYMMDDHHmmSS)
E o arquivo ./alt_upcs.csv
tem 2 colunas, sendo uma delas sku (1419), a segunda sendo UPC (9781844484201)
Se eu não conseguir encontrar uma correspondência no /var/www/acpog/uploads/
do sku, quero tentar encontrar uma correspondência para o UPC. Se isso falhar, quero tentar encontrar uma correspondência para o sku com zeros preenchendo o lado esquerdo.
Este é o snippet:
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
e aqui está a saída:
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
As linhas 1, 2, 3 e 5 são as esperadas. A linha 4 não tem o começo da linha que estou tentando fazer até logo antes da vírgula. Se eu fizer eco da variável $j
depois disso, ela contém o UPC como esperado, mas o comando grep usando essa variável também não está retornando nada.
EDIT: Além disso, existem 4 arquivos que devem coincidir no diretório de upload, todos começando com 0SCAN2013
Aqui estão alguns resultados adicionais da execução manual de comandos a partir do prompt:
# 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
Para testar, esses arquivos devem funcionar. No diretório em que o script reside: nome do arquivo alt_upcs.csv
contendo 1 linha:
1419,9781844484201
No diretório /var/www/acpog/upload/
, nome do arquivo 0SCAN20130821213905
contining 1 line:
9781844484201,0,2,8:21,13:48:496