Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Может быть, попробовать это.
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, но таким образом, все части просты и, надеюсь, понятны.
printf "%s\n" *.filtered.vcf |
cut -d. -f1 |
sort |
xargs -n1 sh -c 'printf "%s\t%s\t%s\n" "$1" "$(wc -l <"${1}.vcf")" "$(wc -l <"${1}.filtered.vcf")"' --
xargs -i basename {} .filtered.vcf
будет безопаснее) sort -tr -k2 -n
будет отсортировано численно и будет еще лучше). xargs -n1
Для каждого файла выполнить скрипт sh -c
printf "%s\t%s\t%s\n"
- вывод со строкой нестандартного формата ... "$1"
- имя файла и ... "(wc -l <"${1}.vcf")"
- подсчитать количество строк в файле .vcf и ... "$(wc -l <"${1}.filtered.vcf")"
- количество строк в .filtered.vcf Пример:
> touch chr{1..3}{,.filtered}.vcf
> echo > chr1.filtered.vcf ; echo > chr2.vcf ;
> printf "%s\n" *.filtered.vcf |
> cut -d. -f1 |
> sort |
> xargs -n1 sh -c 'printf "%s\t%s\t%s\n" "$1" "$(wc -l <"${1}.filtered.vcf")" "$(wc -l <"${1}.vcf")"' --
chr1 0 1
chr2 1 0
chr3 0 0
Чтобы иметь красивую таблицу с заголовки, используйте column
:
> .... | column -N Chromosome,VCFCount,FilteredVCFCount -t -o ' '
Chromosome VCFCount FilteredVCFCount
chr1 0 1
chr2 1 0
chr3 0 0