это мой первый пост, поэтому, надеюсь, я стану моим вопросом понятным.Используйте первые 3 символа имени файла как переменной в сценарии оболочки
Я новичок в сценариях оболочки, и моя задача заключается в том, чтобы добавить новое значение в каждую строку файла csv. Значение, которое необходимо добавить, основано на первых трех цифрах имени файла.
Я немного фона. Файлы csv, которые я получаю, в конечном итоге загружаются в секционированные таблицы оракула. Начало имени файла (например, BATTESTFILE.txt) содержит секционированный сайт, поэтому мне нужно написать скрипт, который принимает первые 3 символа имени файла (в этом примере BAT) и добавляет его в конец каждой строки файла ,
Ближайшие у меня до сих пор, когда я раздел код голых основ того, что мне нужно сделать:
build_files()
{
OLDFILE=${filename[@]}.txt
NEWFILE=${filename[@]}.NEW.txt
ABSOLUTE='path/scripts/'
FULLOLD=$ABSOLUTE$OLDFILE
FULLNEW=$ABSOLUTE$NEWFILE
sed -e s/$/",${j}"/ "${FULLOLD}" > "${FULLNEW}"
}
set -A site 'BAT'
set -A filename 'BATTESTFILE'
for j in ${site[@]}; do
for i in ${filename[@]}; do
build_files ${j}
done
done
Здесь я создал массив site
как будет 6 «сайтов ', и это упростит добавление дополнений к коду, когда файлы придут ко мне. То же самое должно быть siad для массива filename
.
Эти коды работают, но это не так автоматизировано, как мне нужно. Один из моих самых последних попыток были ниже:
build_files()
{
OLDFILE=${filename[@]}.txt
NEWFILE=${filename[@]}.NEW.txt
ABSOLUTE='/app/dss/dsssis/sis/scripts/'
FULLOLD=$ABSOLUTE$OLDFILE
FULLNEW=$ABSOLUTE$NEWFILE
sed -e s/$/",${j}"/ "${FULLOLD}" > "${FULLNEW}"
}
set -A site 'BAT'
set -A filename 'BATTESTFILE'
for j in ${site[@]}; do
for i in ${filename[@]}; do
trust=echo "$filename" | cut -c1-3
echo "$trust"
if ["$trust" = 'BAT']; then
${j} = 'BAT'
fi
build_files ${j}
done
done
Я нашел код trust=echo "$filename" | cut -c1-3
через другой вопрос о StackOverflow, как я исследовал, но это не похоже на работу для меня. Я добавил в echo
, чтобы проверить, что держал trust
, но он был пуст.
Я получаю 2 ошибки обратно: Line 17 - BATTESTFILE: не найдено Line 19 - Тест:] пропавшие
Извините за долгое наматывается вопросы. Надеюсь, он содержит полезную информацию и показывает шаги, которые я предпринял. Все вопросы, комментарии прочь. Любая помощь или руководство очень ценятся. Благодарю.
Какую оболочку вы используете? Похож на ksh. Какая версия? Попробуйте 'ksh --version' –