我编写了一个简单的脚本来分析 BED 文件(一种文本文件格式,用于将基因组区域存储为坐标和相关注释。数据以由空格或制表符分隔的列的形式呈现。)并且在我的一个论点中,我有使用awk。问题是我的脚本 $2 的第二个变量与使用 awk 的文件的第二列匹配。
这是我的脚本(问题出在最后一个埃利夫)
#/bin/bash -e
# This script provides handly funtions to analyse bed files.
function show_usage (){
printf "Usage: $0 [options [parameters]]\n"
printf "\n"
printf "Options:\n"
printf " -g|--genes, Print genes avoiding repetition\n"
printf " -cg|--count_genes, Print the number of different genes found in the file\n"
printf " -cl|--count_lines,Count the number of liles\n"
printf " -chr|--count_chromosomes, Print chromosomes avoiding repetition\n"
return 0
}
if [[ "$1" == "--genes" ]] || [[ "$1" == "-g" ]];then
echo gene
# shows all genes
cat $2 | cut -f4 | cut -d "_" -f1 | sort -u
elif [[ "$1" == "--count_genes" ]] || [[ "$1" == "-cg" ]]; then
echo count genes
# Count genes
cat $2 | cut -f4 | cut -d "_" -f1 | sort -u| wc -l
elif [[ "$1" == "count_lines" ]] || [[ "$1" == "-cl" ]]; then
echo Number of lines:
# Count the number of liles
cat $2 | cut -f4 | cut -d "_" -f1 | sort -u| wc -l
elif [[ "$1" == "count_chromosomes" ]] || [[ "$1" == "-chr" ]]; then
echo Number of chromosomes
# The chromosomes of this file are:
cat $2 | cut -f1 | sort -u | sort -g
elif [[ "$1" == "Count Total Length Of Regions" ]] || [[ "$1" == "-p" ]]; then
echo Count Total Length Of Regions
# The Count Total Length Of Regions:
cat "$2" | awk -F"\t" "BEGIN{SUM=0}{ SUM+=$3-$2 }END{print SUM}"
else
echo Incorrect input provided
show_usage
fi
猫 ”2 美元" | awk -F"\t" "BEGIN{SUM=0}{ SUM+=$3-2 美元}END{打印总和}"
上一行中的第一个 $2 引用我的脚本的第二个变量(文件输入)。第二个 $2 引用文件输入的第二列。
当我面对这个问题时,我认为这一定是一个非常典型的问题,awk 应该有一种选择字段的替代方法。但我还没有找到任何方法来避免这个问题。
我是否必须选择其他命令来避免此问题?
答案1
这里的问题是外壳正在膨胀$2
并且$3
;为避免这种情况,请使用单引号:
cat "$2" | awk -F"\t" 'BEGIN{SUM=0}{ SUM+=$3-$2 }END{print SUM}'