2015-08-10 3 views
0

Я новый парень Linux. У меня вопрос: У меня есть куча файлов в каталоге, например: а-188_1.out а-188_2.out а-188_3.outПолучить числовое значение из имени файла

как можно получить номер 188 из этих имен ?

+1

Получите его где? Вы пишете программу на каком-то языке? –

+0

Расскажите подробнее о том, что вы пытаетесь сделать. –

ответ

1

Предполагая (поскольку вы работаете в 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]/} 

Это здесь сложны две вещи:

  1. Сделайте это рекурсивно над содержимым каталога. Это делается здесь с помощью bash for loop (обратите внимание, что файл переменной принимает в качестве значения имя каждого из файлов в текущем рабочем каталоге один за другим)

    for file in ls *; do (команды, которые вы хотите сделать для каждого файла в CWD, разделенные символом «;»); сделано

  2. Существует несколько номеров в именах файлов, вы просто хотите первый. Таким образом, мы оставляем пробелы и обрабатываем результат (который является только номерами и пробелами из текущего имени файла) в две другие команды: xargs (удаляет начальное и конечное пустое пространство) и cut -d' ' -f1` (возвращает только часть строки перед первое оставшееся пространство, то есть первый номер в нашем имени файла), Мы сохраняем полученную строку в переменную «из» и распечатать его с echo $out,

    out=echo "${file//[!0-9]/ }"|xargs|cut -d' ' -f1; echo $ out

Обратите внимание, что число все еще находится в строковом типе данных. Вы можете преобразовать его в целое, если хотите, используя двойные скобки, превалирующие в $ out_int=$((out))

Смежные вопросы