如何在testin的biginig中将变量字符串传递给文件txt?

时间:2017-03-14 11:30:29

标签: bash shell

我遇到了问题

我有像这个gene.sh

这样的程序

对于所有文件(es文件:geneX.csv)创建一个名为gene的目录(例如:Genex / geneX.csv),接着这个程序编译gene.sh中的另一个程序,但这个程序需要一个变量和我不知道怎么做。

这是程序gene.sh

#!/bin/bash

# Create a dictory for each file *.xls and *.csv

for fname in *.xlsx *csv
    do
            dname=${fname%.*}

            [[ -d $dname ]] || mkdir "$dname"
            mv "$fname" "$dname"
    done

# For each gene go inside the directory and compile the programs  getChromosomicPositions.sh to have the positions, and getHapolotipeStings.sh to have the variants

for geni in */; do
    cd $geni
    z=$(tail -n 1 *.csv | tr ';'  "\n" | wc -l)
    cd ..
    cp getChromosomicPositions.sh $geni ---> 
    cp getHaplotypeStrings.sh $geni
    cd $geni
    export z
    ./getChromosomicPositions.sh *.csv
    export z
    ./getHaplotypeStrings.sh *.csv
    cd ..
done

这是程序getChromosomichPositions.sh:

rm chrPosRs.txt

grep '^Haplotype\ ID' $1 | cut -d ";" -f 4-61 | tr ";" "\n" | awk '{print "select chrom,chromStart,chromEnd,name from snp147 where name=\""$1"\";"}' > listOfQuery.txt

while read l; do

    echo $l > query.txt
    mysql -h genome-mysql.cse.ucsc.edu -u genome -A -D hg38 --skip-column-names < query.txt > queryResult.txt

    if [[ "$(cat queryResult.txt)" == "" ]];
    then    

        cat query.txt |
        while read line; do
                echo $line | awk '$6 ~/rs/ {print $6}' > temp.txt;
                if [[ "$(cat temp.txt)" != "" ]];
                        then cat temp.txt | awk -F'name="' '{print $2}' | sed -e 's/";//g' > temp.txt;
            ./getHGSVposHG19.sh temp.txt ---> Hear the problem--->
                else
                        echo $line | awk '{num=sub(/.*:g\./,"");num+=sub(/\".*/,"");if(num==2){print};num=""}' > temp2.txt
                fi
        done
        cat query.txt >> varianti.txt
        echo "Missing Data" >> chrPosRs.txt
    else
        cat queryResult.txt >> chrPosRs.txt
    fi

done < listOfQuery.txt

rm query*

听到问题:

我需要输入文件temp.txt并自动在文件的开头放置程序gene.sh的变量$ geni

我该怎么做?

1 个答案:

答案 0 :(得分:0)

为什么不在调用脚本时将"$geni"作为第一个参数传递,并将其余参数视为预期的.csv文件。

./getChromosomicPositions.sh "$geni" *.csv

或者,您可以将其设置为脚本的环境变量,以便可以在那里使用(或只是导出它)。

geni="$geni" ./getChromosomicPositions.sh *.csv

在任何情况下,一旦你在第二个脚本中有了它,你就可以

如果作为第一个参数传递:

echo "${1}:$(cat temp.txt | awk -F'name="' '{print $2}' | sed -e 's/";//g')

或者作为环境变量传递:

echo "${geni}:$(cat temp.txt | awk -F'name="' '{print $2}' | sed -e 's/";//g')