Скрипт цикла из входного файла - PullRequest
0 голосов
/ 02 июля 2018

У меня есть справочный файл с именами устройств в них. Например, 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

1 Ответ

0 голосов
/ 02 июля 2018

Просто оберните цикл вокруг вашего кода вместо того, чтобы предполагать, что аргументы входят в командную строку.

SRCFILE="~/Desktop/deviceinfo.csv"  
LOGDIR="~/Desktop/"  
LOGFILE="$LOGDIR/DeviceNames.csv"  

while read device_name quantityNum
do max_sequence_name=$( grep -o -e "$device_name[0-9]*" $SRCFILE |
                        sort --reverse | head -n 1)
   max_sequence_num=${max_sequence_name: -3}

   array_new_sequence_name=()
   for i in $(seq 1 $quantityNum)
   do cnum=$((max_sequence_num + i))
      array_new_sequence_name+=("$device_name$cnum")
   done

   for sqn in ${array_new_sequence_name[@]};
   do echo $sqn >> $LOGFILE
   done
done < input.file

Возможно, я бы сейчас передал входной файл в качестве параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...