#ruby #shell
#ruby #оболочка
Вопрос:
В настоящее время я использую 3 разные команды для достижения своей цели: загрузить zip-файл, извлечь его, преобразовать текстовый файл в utf8, а затем преобразовать csv в json!
Сначала у меня есть:
wget https://www.example.com/example.zip -O temp.zip; unzip -o temp.zip; rm temp.zip
Это хорошо, но проблема для начала в том, как мне переименовать извлекаемый файл, чтобы он каждый раз оставался одинаковым для следующих процессов, поскольку в zip-архиве каждый день может быть другое имя? Затем я запускаю этот скрипт в зависимости от имени файла, который преобразует ISO в utf8:
sh dir_iconv.sh example1.txt ISO8859-1 UTF-8
Что это за скрипт:
#!/bin/bash
ICONVBIN='/usr/bin/iconv' # path to iconv binary
if [ $# -lt 3 ]
then
echo "$0 dir from_charset to_charset"
exit
fi
for f in $1/*
do
if test -f $f
then
echo -e "nConverting $f"
/bin/mv $f $f.old
$ICONVBIN -f $2 -t $3 $f.old > $f
rm -f $f.old
else
echo -e "nSkipping $f - not a regular file";
fi
done
И затем, наконец, я запускаю скрипт ruby csv2json — https://github.com/darwin/csv2json — это вызывается следующим образом (разделитель канала), чтобы выдать мне вывод json:
csv2json -s '|' example1.txt > example1.json
Есть ли простой способ объединить это в одну команду или скрипт, который можно вызвать?
Ответ №1:
Передавайте все ваши команды одну за другой и, при необходимости, помещайте их в файл сценария оболочки.
wget -qO- https://www.example.com/example.zip | unzip | iconv -f ISO8859-1 -t UTF-8 | csv2json > example.json