在我的脚本中使用 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}'

相关内容