指定された拡張子を持つディレクトリ内の各ファイルに対して、ファイル名の部分文字列のみを使用して別のファイルに追加し、拡張子は異なりますが、部分文字列は同じファイルに出力したいと思います。
私がやりたいことに似たいくつかの例を見つけましたが、bashスクリプトを書いているので、いくつかの難しさがあり、例を見つけるのに苦労しています。
たとえば、 filename.sample で始まり、部分文字列「filename」のみが必要です。
私がやろうとしているのは次のとおりです。
for i in /path/to/*.sample
do
bar="${i%%.sample*}"
sed "s/^>\(.*\)/>\1;label=${bar##*/};/" "$i" > "$i"_bar \;
done
ファイルの内容は*.sample
次のとおりです。
*.sample
> MEWFJWRNFF_141
AB28974UJBDASX
希望の出力は次のとおりです。
Output_bar
> MEWFJWRNFF_141; label=filename;
AB28974UJBDASX
不明な点があれば教えてください!ありがとうございます!
答え1
for i in /path/to/*.sample
do
str="; label=$(basename -s.sample $i);"
sed "/^>/ s/$/$str/" "$i"
done
basename
このコマンドは、パスを除いてファイル名のみを提供します。-s.sample
拡張機能を削除します- したがって、これには
i
次のものが含まれます/path/to/filename.sample
。str
; label=filename;
/^>/ s/$/$str/
で始まる行を探し、>
変数の内容を行str
の末尾に追加します。
出力ファイルの名前を指定する方法を理解できません。それなら与えられるでしょうi
。/path/to/filename.sample
"$i"_bar
/path/to/filename.sample_bar