Может быть, попробовать это.
for chr in chr*.vcf; do
base=${chr%.vcf}
awk -v base="$base" 'BEGIN { OFS="\t"
# Remove this to not have this pesky header line
print "Chromosome", "VCFCount", "FilteredVCFCount"
}
FNR==1 && n { p=n }
{ n=FNR }
END { print base, p, n }' "$chr" "$base.filtered.vcf"
done >counts.txt
Очень простой скрипт Awk просто собирает наибольший номер строки для каждого файла (поэтому мы в основном переопределяем wc -l
) и печатает собранные числа в нужном формате. FNR
- номер строки в текущем входном файле; мы просто сохраняем это и копируем значение в p
, чтобы сохранить сохраненное значение из предыдущего файла в отдельной переменной, когда мы переключаемся на новый файл (начиная со строки № 1).
Подстановка параметра оболочки ${variable%pattern}
извлекает значение variable
с любым совпадением суффикса для pattern
. (Существует также ${variable#pattern}
для удаления префикса, и у Bash есть ##
и %%
для обрезки самого длинного совпадения с образцом вместо самого короткого.)
Если важна эффективность, вы, вероятно, могли бы преобразовать весь сценарий в один сценарий Awk, но таким образом все части просты и, надеюсь, понятны.