sed は、ファイル名の一部を同じ部分文字列を持つ別のファイルの内容にコピーします。

sed は、ファイル名の一部を同じ部分文字列を持つ別のファイルの内容にコピーします。

指定された拡張子を持つディレクトリ内の各ファイルに対して、ファイル名の部分文字列のみを使用して別のファイルに追加し、拡張子は異なりますが、部分文字列は同じファイルに出力したいと思います。

私がやりたいことに似たいくつかの例を見つけましたが、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.samplestr; label=filename;
  • /^>/ s/$/$str/で始まる行を探し、>変数の内容を行strの末尾に追加します。

出力ファイルの名前を指定する方法を理解できません。それなら与えられるでしょうi/path/to/filename.sample"$i"_bar/path/to/filename.sample_bar

関連情報