У меня есть файл, который содержит следующее содержимое:
set0027:
set0027_100-250
set0027_1-150
set0027_50-200
set0038:
set0038_100-250
set0038_1-150
set0038_50-200
Я хочу изменить его следующим образом:
cd set0027
clustalw INFILE=set0027_100-250 OUTFILE=set0027_100-250.aln
clustalw INFILE=set0027_1-150 OUTFILE=set0027_1-150.aln
clustalw INFILE=set0027_50-200 OUTFILE=set0027_50-200.aln
cd ..
cd set0038
clustalw INFILE=set0038_100-250 OUTFILE=set0038_100-250.aln
clustalw INFILE=set0038_1-150 OUTFILE=set0038_1-150.aln
clustalw INFILE=set0038_50-200 OUTFILE=set0038_50-200.aln
cd ..
Как я могу сделать это, используя скрипт bash?
Примерно так будет работать:
$ perl -npe 's/(.*):/cd \1/; s/^(set.*)/clustalw INFILE=\1 OUTFILE=\1.aln/; s/^\s+/cd ..\n/;' file
cd set0027
clustalw INFILE=set0027_100-250 OUTFILE=set0027_100-250.aln
clustalw INFILE=set0027_1-150 OUTFILE=set0027_1-150.aln
clustalw INFILE=set0027_50-200 OUTFILE=set0027_50-200.aln
cd ..
cd set0038
clustalw INFILE=set0038_100-250 OUTFILE=set0038_100-250.aln
clustalw INFILE=set0038_1-150 OUTFILE=set0038_1-150.aln
clustalw INFILE=set0038_50-200 OUTFILE=set0038_50-200.aln
использует параметры командной строки
-n implicit loop
-e execute perl inline
-p print line