У меня есть список файлов:обрабатывать файлы в парах
file_name_FOO31101.txt
file_name_FOO31102.txt
file_name_FOO31103.txt
file_name_FOO31104.txt
И я хочу использовать пары файлов для ввода в выходной программы, такие как:
program_call file_name_01.txt file_name_02.txt
program_call file_name_03.txt file_name_04.txt
...
Я не хочу:
program_call file_name_02.txt file_name_03.txt
мне нужно сделать это в цикле следующим образом:
#!/bin/bash
FILES=path/to/files
for file in $FILES/*.txt;
do
stem=$(basename "${file}") # stem : file_name_FOO31104_info.txt
output_base=$(echo $stem | cut -d'_' -f 1,2,3) # output_base : FOO31104_info.txt
id=$(echo $stem | cut -d'_' -f 3) # get the first field : FOO31104
number=$(echo -n $id | tail -c 2) # get the last two digits : 04
echo $id $((id+1))
done
Но это не дает то, что я хочу.
В каждом цикле я хочу вызвать программу один раз, два файла в качестве входных данных (последние 2 цифры первого файла всегда нечетное 01
, последние 2 цифры второго файла всегда даже 02
)
Как и в сторону, все шапки имена переменных [задается POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html) для использования переменных с значением, системы или оболочки, тогда как имена нижнего регистра зарезервированы для использования приложения. Подумайте об этом в своем собственном коде, чтобы предотвратить любую возможность топать по переменным со значением в системе по ошибке. (Эта спецификация является явной для переменных среды, но установка регулярной переменной оболочки заменяет любую переменную среды с похожим именем, поэтому они разделяют пространство имен). –
BTW, '$ FILES/*. Txt' будут разбиты, если ваш путь' FILES' содержит пробелы, поэтому '' $ FILES "/ *. Txt'. –
@CharlesDuffy - Спасибо - все это прекрасно знать – fugu