Следующие действия помогут вам:
awk '(FNR==1){f=FILENAME;sub(/\.[A-Za-z]*$/,"_",f)}
/^>/{$0=">" f substr($0,2)}
1' Bubo_bubo.fasta
Это, однако, запишет все на экран, возможно, вас заинтересуют новые файлы.Таким образом, вы можете использовать bash с перенаправлением для нескольких файлов как:
for f in *.fasta; do
awk '(FNR==1){f=FILENAME;sub(/\.[A-Za-z]*$/,"_",f)}
/^>/{$0=">" f substr($0,2)}
1' "$f" > "/path/to/new/location/$(basename $f)"
done
Если вы действительно хотите, вы можете делать все в самом awk, и это будет:
awk '(FNR==1){ # When a new file is opened (first record)
close(fout); # close previous output file
fout=FILENAME
sub(".*/", "", fout) # get basename of file
f=fout # set f to basename of file
fout="path/to/new/location/" fout # prepend output directory
sub(/\.[A-Za-z]*$/,"_",f) # remove extention from f
}
/^>/{$0=">" f substr($0,2)} # if header found, update it
{print > fout} # print to output file
' *.fasta