내 스크립트에서 awk를 사용할 때 $ 필드와 충돌합니다.

내 스크립트에서 awk를 사용할 때 $ 필드와 충돌합니다.

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

관련 정보