edit: изменил временную метку / tmp / begin, благодаря комментарию Стефана Чазеласа
man touch #find how to create a "begin" file JUST BEFORE Jan 1st of the year at 00:00:00.000
#and a "end" file for JUST AFTER the Dec 31st of the year, at 23:59:59.999
#usually, -t time
# specifies a particular time using this format:
# [[[[cc]yy]MM]dd]hhmm[.ss]
#make sure you place those 2 files OUTSIDE of the place where you look for files, as they are themselves suceptible to be moved!
touch -t 200901010000.00 /tmp/begin #1st Jan of 2009 at 00h00mn00s (note: files with that exact time will be not included!)
touch -t 201001010000.00 /tmp/end #just after Dec 31st of 2009
#then: with '/orig' the starting folder you want to look in, and '/dest' the destination folder:
find /orig \( \( -newer /tmp/begin \) -a \( ! -newer /tmp/end \) \) -exec echo mv '{}' /dest \;
#and remove "echo" once you know it's just listing the relevant files
Вместо этого используйте массив, который позволит правильно индексировать переменные:
#!/bin/bash
declare -ai counters=(11 14) # indexes start from 0
v1=()
v2=()
for i in {1..2}; do
v1[$i]=$(aws iam get-group --group-name VideoEditors | awk -v counter1="$counter" 'NR==counter1' | awk -F\" '{print $4}')
counters[0]+=7
v2[$i]=$(aws iam get-group --group-name VideoEditors | awk -v counter3="$counter2" 'NR==counter3' | awk -F\" '{print $4}')
counters[1]+=7
echo "${v1[$i]}"
echo "${v2[$i]}"
done
Возможно, вы могли бы поместить назначения vN
в другой цикл for
, чтобы уменьшить количество повторений.
Конечно, если вы не используете v1
и v2
ни для чего другого, кроме как для однократного отображения значений, вы можете просто запустить aws... | awk
напрямую и пропустить переменные и echo
.
Я не знаю, что должен делать ваш код, но вот что он делает:
В первой итерации -, когда i равно 1 -, он объявляет переменные v11 и v12 и присваивает им что-то, а затем выводит $v1$i на экран.
v1 не существует -и $i является значением i, поэтому вы должны получить 'ничего' с добавленной 1 в качестве вывода в первом цикле:
А затем во второй итерации -, когда i равно 2 -дважды 2 по той же причине.
То, что вы делаете после знака равенства с awk и т. д., не имеет значения для результата.
Предложение использовать массив и использовать $i в качестве индекса в нем решит проблему.
Кажется, вы хотите вывести четвертое"
-поле с разделителями в строках 11, 17, 18 и 21 вывода команды aws
.
aws iam get-group --group-name VideoEditors |
awk -F '"' 'NR == 11 || NR == 17 || NR == 18 || NR == 21 { print $4 }'
Это вызывает aws
один раз вместо четырех раз и вызывает awk
один раз вместо восьми раз.
Если вы хотите это в массиве:
readarray -t output < <(
aws iam get-group --group-name VideoEditors |
awk -F '"' 'NR == 11 || NR == 17 || NR == 18 || NR == 21 { print $4 }' )
Массив output
теперь будет содержать данные с одной строкой из awk
в каждом элементе, начиная с индекса 0.
Если вы хотите разделить этот массив на два, чтобы получить элементы 0 и 2 в одном и 1 и 3 в другом:
v1=( "${output[0]}" "${output[2]}" )
v2=( "${output[1]}" "${output[3]}" )