Попытка создать скрипт, который считает длину всех чтений в файле fastq, но не получает возврата - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь подсчитать длину каждого чтения в файле fastq из секвенирования illumina и вывести его в tsv или любой другой файл, чтобы потом я мог потом посмотреть на это и посчитать количество чтений на файл. Поэтому мне нужно циклически перебрать файл и обработать каждую строку, которая имеет чтение (каждую четвертую строку), затем получить его длину и сохранить его в качестве вывода

num=2
for file in *.fastq
do
    echo "counting $file"
    function file_length(){
    wc -l $file | awk '{print$FNR}'
    }
    for line in $file_length
    do
        awk 'NR==$num' $file | chrlen > ${file}read_length.tsv
        num=$((num + 4))
    done
done

В настоящее время все я получаю файл подсчета $ и никаких других выводов, но также без ошибок

1 Ответ

0 голосов
/ 10 мая 2019

Ваш скрипт содержит много ошибок как в синтаксисе, так и в алгоритме.Пожалуйста, попробуйте shellcheck, чтобы увидеть, в чем проблема.Самой большой проблемой будет часть $file_length.Вы можете вызвать здесь функцию file_length(), но это просто неопределенная переменная, которая оценивается как ноль в цикле for.

Если вы просто хотите посчитать длину 4-й строки *.fastq файлов, попробуйте что-то вроде:

for file in *.fastq; do
    awk 'NR==4 {print length}' "$file" > "${file}_length.tsv"
done

Или, если вы хотите объединить результаты в один файл TSV, попробуйте:

tsvfile="read_lenth.tsv"
for file in *.fastq; do
    echo -n -e "$file\t" >> "$tsvfile"
    awk 'NR==4 {print length}' "$file" >> "$tsvfile"
done

Надеюсь, это поможет.

...