У меня есть справочный файл с именами устройств в них. Например, WABEL8499IPM101. Я использую этот скрипт, чтобы установить базовое имя (без последних 3 цифр), чтобы посмотреть справочный файл и посмотреть, что уже используется. Если используется 101, он создаст для меня файл с 102, 103, если я запрашиваю 2 всего. Я хочу использовать входной файл, чтобы запустить его несколько раз. Я также пытаюсь выяснить, как начать с 101, если при поиске справочного файла не найдено имя
Я хотел бы зациклить это, используя входной файл вместо того, чтобы вручную вводить bash test.sh WABEL8499IPM 2 каждый раз. Я хотел бы иметь возможность создать входной файл из всех имен, которые нужно сравнить и затем вывести. Также было бы неплохо, если бы не было совпадения, то он начинает создавать имена в WABEL8499IPM101 вместо просто WABEL8499IPM1.
Пример входного файла:
ColumnA (BASE NAME) ColumnB (QUANTITY)
WABEL8499IPM 2
Сценарий:
SRCFILE="~/Desktop/deviceinfo.csv"
LOGDIR="~/Desktop/"
LOGFILE="$LOGDIR/DeviceNames.csv"
# base name, such as "WABEL8499IPM"
device_name=$1
# quantity, such as "2"
quantityNum=$2
# the largest in sequence, such as "WABEL8499IPM108"
max_sequence_name=$(cat $SRCFILE | grep -o -e "$device_name[0-9]*" | sort --reverse | head -n 1)
# extract the last 3digit number (such as "108") from max_sequence_name
max_sequence_num=$(echo $max_sequence_name | rev | cut -c 1-3 | rev)
# create new sequence_name
# such as ["WABEL8499IPM109", "WABEL8499IPM110"]
array_new_sequence_name=()
for i in $(seq 1 $quantityNum);
do
cnum=$((max_sequence_num + i))
array_new_sequence_name+=($(echo $device_name$cnum))
done
#CODE FOR CREATING OUTPUT FILE HERE
#for fn in ${array_new_sequence_name[@]}; do touch $fn; done;
# write log
for sqn in ${array_new_sequence_name[@]};
do
echo $sqn >> $LOGFILE
done
Использование:
bash test.sh WABEL8499IPM 2
Результат в лог-файле:
WABEL8499IPM109
WABEL8499IPM110