Я новый парень Linux. У меня вопрос: У меня есть куча файлов в каталоге, например: а-188_1.out а-188_2.out а-188_3.outПолучить числовое значение из имени файла
как можно получить номер 188 из этих имен ?
Я новый парень Linux. У меня вопрос: У меня есть куча файлов в каталоге, например: а-188_1.out а-188_2.out а-188_3.outПолучить числовое значение из имени файла
как можно получить номер 188 из этих имен ?
Предполагая (поскольку вы работаете в Linux и работаете с файлами), вы будете использовать shell/bash-script ... (Если вы используете что-то другое (скажем, python, ...), решение будет , конечно, быть другой.)
... это будет работать
for file in `ls *`; do out=`echo "${file//[!0-9]/ }"|xargs|cut -d' ' -f1`; echo $out; done
Объяснение
Основная проблема заключается в извлечении числа из строки в Баш СБН ript (поиск stackoverflow для этого, вы найдете десятки различных решений).
Это делается в команде выше как (строка из которой число должны быть извлечено сохраняется в переменном файле):
${file//[!0-9]/ }
или, без пробелов
${file//[!0-9]/}
Это здесь сложны две вещи:
Сделайте это рекурсивно над содержимым каталога. Это делается здесь с помощью bash for loop (обратите внимание, что файл переменной принимает в качестве значения имя каждого из файлов в текущем рабочем каталоге один за другим)
for file in
ls *
; do (команды, которые вы хотите сделать для каждого файла в CWD, разделенные символом «;»); сделано
Существует несколько номеров в именах файлов, вы просто хотите первый. Таким образом, мы оставляем пробелы и обрабатываем результат (который является только номерами и пробелами из текущего имени файла) в две другие команды: xargs
(удаляет начальное и конечное пустое пространство) и cut -d' ' -f1`
(возвращает только часть строки перед первое оставшееся пространство, то есть первый номер в нашем имени файла), Мы сохраняем полученную строку в переменную «из» и распечатать его с echo $out
,
out=
echo "${file//[!0-9]/ }"|xargs|cut -d' ' -f1
; echo $ out
Обратите внимание, что число все еще находится в строковом типе данных. Вы можете преобразовать его в целое, если хотите, используя двойные скобки, превалирующие в $ out_int=$((out))
Получите его где? Вы пишете программу на каком-то языке? –
Расскажите подробнее о том, что вы пытаетесь сделать. –