저는 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}'