对于一个目录中具有指定扩展名的每个文件,我想仅使用文件名中的一个子字符串添加到另一个文件,并输出为具有不同扩展名但相同子字符串的文件。
我发现了一些与我想做的类似的例子,但我正在编写一个 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