#bash #sed
#bash #sed
Вопрос:
примеры файлов:
sample1_day1/
sample1.str
sample1.yy
sample1_ABC.log
sample2_day1/
sample2.str
sample2.yy
sample2_ABE.log
sample3_day1/
sample3.str
sample3.yy
sample3_ASC.log
Я использовал это для перебора файлов:
for i in `echo *$FILTER | sed 's/'$FILTER'//'`;do
"something here";
done
В данном случае это возвращает «идентификатор», «sampleX»
, но когда я использовал его для перебора папок, это не удалось.
Мне нужно назначить в $i
качестве «тега имени» для упрощения именования выходных и входных файлов, необходимых для такой программы, как:
for i in something; do
"program --input $i.str --input2 $i.yy --out $i_clean.txt"
done
Я хотел, чтобы мой скрипт bash получал имя «sampleX» для папок (например, sample1_day1 и т. Д.) И составлял список sampleX, использовал этот идентификатор для cd
(например, cd $i_day1
) для папки и выполнял некоторые анализы в этой папке, впоследствии называя соответственно выходные и входные данные.
Короче говоря, как мне получить только sample1, sample2 и sample3 и представить их как i?
Спасибо
Ответ №1:
Немного измененная версия ответа @fedterzi. Это помогает только перемещаться внутри sample_day1 или sample_day *, даже если у вас есть каталог с другим именем.
#!/bin/bash
for i in sample*_day1/ ; do
cd $i
"program --input $i.str --input2 $i.yy --out $i_clean.txt"
done
Ответ №2:
for i in */ ; do
"program --input $i.str --input2 $i.yy --out $i_clean.txt"
done
Ответ №3:
Если это просто sample1, sample2, sample3, то это также будет работать-
for i in {1..3}
do
"program --input sample"$i".str --input2 sample"$i".yy --out sample"$i"_clean.txt"
done
Ответ №4:
После чтения и чтения в течение почти нескольких часов я понял, чего не хватает: «/», который обозначает его свойство.
Но, конечно. А затем я также заметил это в ответах @Parthiban и @fedterzi (спасибо, ребята!).