2013-10-09 3 views
0

У меня есть несколько файлов (.txt), имя являются:Linux: Как я могу извлечь информацию из имени файла?

run_freq100ampl0.6offs0.8_1 
run_freq100ampl0.4offs1.1_1 
run_freq100ampl0.2offs1.0_1 
run_freq100ampl0.4offs1.2_1 
run_freq100ampl0.2offs1.1_1 
run_freq100ampl0.5offs0.8_1 
run_freq100ampl0.2offs1.2_1 
run_freq100ampl0.4offs0.8_1 

Я хочу, чтобы получить количество AMPL, как

0.6 
0.4 
0.2 
0.4 
0.2 
0.5 
0.2 
0.4 

Как я могу сделать это с 'найти', «Grep 'или' cat 'в Linux?

ответ

1

Использование grep:

grep -Po '(?<=ampl).*(?=offs)' input 

Пример:

$ grep -Po '(?<=ampl).*(?=offs)' <<< "run_freq100ampl0.2offs1.1_1" 
0.2 

Использование sed:

$ sed 's/.*ampl\(.*\)offs.*/\1/' <<< "run_freq100ampl0.2offs1.1_1" 
0.2 
+0

Спасибо! Но я хочу показывать все значения один раз. Как мне это сделать? – user2862989

+0

@ user2862989 Либо сказать 'sed '/.* ampl \ (. * \) Offs. */\ 1 /' filename' или' grep -Po '(? <= Ampl). * (? = Offs)' filename ' – devnull

+0

@ user2862989, так как вы новичок здесь, пожалуйста, не забудьте отметить ответ, принятый, если ваша проблема уже решена. Вы можете сделать это, нажав на галочку рядом с ответом, чтобы переключить ее с полого на зеленый. См. [Справочный центр> Задать вопрос] (http://stackoverflow.com/helpcenter/someone-answers), если у вас есть какие-либо сомнения! – fedorqui

0

Использование awk

awk -F"ampl|off" '{print $2}' 
0.6 
0.4 
0.2 
0.4 
0.2 
0.5 
0.2 
0.4 

Или, используя фиксированное положение

awk '{print substr($0,16,3)}' 
Смежные вопросы