Один из способов может быть:
awk -F, 'FNR==1{match($1, "^>([^.]+)[^ ]+ (.*)", oFv); $1= ">" oFv[2]; sub(/ *complete genome */, "", $2);}{printf $0>oFv[1] ".fasta"}' somefiles*
Это сохранит старые файлы и запишет соответствующие новые файлы.
Также это предполагает, что входные файлы имеют только одну строку, как вы дали.
Если вы хотите переименовать старые файлы, а также изменить их содержимое,
Учитывая вашу систему и bash, я думаю, что это GNU awk & GNU sed,
пожалуйста, сделайте резервную копию ваших файлов и попробуйте это:
#!/usr/bin/bash
for file in somefiles*; do
nn="$(awk -F[\>.] '{printf $2 ".fasta";exit}' "file")"
sed -ri '1{s/^[^ ]* />/;s/, complete genome//;}' "file"
if [ ! -f "$nn"];
then
mv "file" "nn"
else
echo "'$nn' exists, skip '$file', its content already changed." | tee _err_.log
fi
done
Или как вкладчик:
for file in somefiles*; do nn="$(awk -F[\>.] '{printf $2 ".fasta";exit}' "$file")"; sed -ri '1{s/^[^ ]* />/;s/, complete genome//;}' "$file"; if [ ! -f "$nn" ]; then mv "$file" "$nn"; else echo "'$nn' exists, skip '$file', its content already changed." | tee _err_.log; fi; done