Awk создает неявный цикл вокруг основной части скрипта: за исключением блоков BEGIN
и END
(и определений функций), скрипт выполняется для каждой строки в последовательности.Поэтому было бы очень странно иметь в awk-скрипте цикл типа for (i = 1; i<= NR; i++)
: когда awk проходит первую строку, выполняется тело цикла для i=1
, затем awk проходит вторую строку и тело цикла выполняется для i=1
и i=2
, затем awk проходит вторую строку и тело цикла выполняется для i=1
и i=2
и i=3
и т. д.
Предполагая, что имена сотрудников не повторяются, общая заработная плата каждого работника равна просто $2 * $3
. Вы можете распечатать это, если хотите:
NR == 1 { print $1, $2, $3, "total" }
NR != 1 { print $1, $2, $3, $2 * $3 }
(Условие NR == 1
идентифицирует строку заголовка.)
Общая заработная плата всех сотрудников представляет собой сумму этого выражения для каждой строки кроме строки заголовка. Чтобы рассчитать общую заработную плату для всех сотрудников, добавьте заработную плату текущего сотрудника к промежуточной сумме.
NR != 1 { total += $2 * $3 }
Ваш сценарий не использует переменную цикла filename
. filename.fastqsanger
не ссылается на переменную и подразумевает, что полное имя файла еще не присутствует, хотя оно есть.
Вот исправленная версия:
for filename in /Test/*.fastqsanger; do
awk '{if(NR%4==1) {printf(">%s\n",substr($0,2));} else if(NR%4==2) print;}' < $filename | awk 'NR%2==0' | sed 's/TGAGATGTGA/*/p' | cut -d '*' -f 2 -s | sort -k 1.180,1.194 -u | cat -n | sed 's/^/>/' | tr "[\t]" "\n" > $filename.fasta
done
Вы не используете переменную filename
в строке ниже:
for filename in /Test/*.fastqsanger; do
awk '{if(NR%4==1) {printf(">%s\n",substr($0,2));} else if(NR%4==2) print;}' < filename.fastqsanger | awk 'NR%2==0' | sed 's/TGAGATGTGA/*/p' | cut -d '*' -f 2 -s | sort -k 1.180,1.194 -u | cat -n | sed 's/^/>/' | tr "[\t]" "\n" > filename.fasta
done
Попробуйте:
for filename in /Test/*.fastqsanger
do
fname=`basename $filename .fastqsanger`
awk '{if(NR%4==1) {printf(">%s\n",substr($0,2));} else if(NR%4==2) print;}' < $filename | awk 'NR%2==0' | sed 's/TGAGATGTGA/*/p' | cut -d '*' -f 2 -s | sort -k 1.180,1.194 -u | cat -n | sed 's/^/>/' | tr "[\t]" "\n" > $fname.fasta
done
Это сохраняет базовое имя файла в $ fname
, так что:
/Test/abcd.fastqsanger
становится /Test/abcd.fasta
вместо /Test/abcd.fastqsanger.fasta