私のスクリプトでawkを使用すると、$フィールドと競合します。

私のスクリプトでawkを使用すると、$フィールドと競合します。

私はBEDファイル(ゲノム領域を座標と関連する注釈として保存するために使用されるテキストファイル形式。 awkを使用しています。問題は、私のスクリプト$ 2の2番目の変数がawkを使用するファイルの2番目の列と一致することです。

私のスクリプトは次のとおりです(問題は最後のスクリプトにあります)。一生)

#/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番目の変数(ファイル入力)を表します。 2番目の$ 2はファイル入力の2番目の列を表します。

この問題に直面したとき、私はこれが非常に一般的な問題であることに違いありません。しかし、私はこの問題を回避する方法を見つけることができませんでした。

この問題を回避するには、別のコマンドを選択する必要がありますか?

ベストアンサー1

ここでの問題は、シェルが膨張することです$2$3これを防ぐには、単一引用符を使用してください。

cat "$2" | awk -F"\t" 'BEGIN{SUM=0}{ SUM+=$3-$2 }END{print SUM}'

おすすめ記事