2013-10-16 63 views
2

我一直在想所有的早上想如何做我想做的事情,但是......我開始感到絕望!Bash編程

我有一個.txt文件中的行和列的數組。所以我想創建一個腳本給我這個信息:

如果我將它輸入到終端(script.sh 1 2 3),它應該給我從.txt文件的列1到3。

如果我將它輸入到終端(script.sh),它應該給我列5到最後一列。

如果我輸入到終端(script.sh 1 2 3 -g胰島素),它應該給我包含單詞「胰島素」的行的列1到3。這裏的-g意思是「基因」,所以目的是尋找那個基因。

我寫了一段代碼,它給了我想要的列或所有列,如果我沒有引入任何變量,但我不能繼續使用-g和基因變量......你有沒有任何想法?

這裏是我的代碼:

#!/bin/bash 

var="$(echo [email protected] | tr " " ",")" 

if [ $# = 0 ]; then 
awk '{for (x=5; x<=NF; x++) {printf "%s ", $x } printf "\n" }' affy.txt 
else 
cat affy.txt | cut -d" " -f$var 
fi 

謝謝!

回答

0

你想讓你的awk腳本知道來自-g的搜索字符串。爲了將值傳遞給腳本,我已經取得了gawk-v參數的良好成功。一旦你有-g的參數在變量lookfor腳本(例如,使用getopt),運行:

gawk -v searchtext="$lookfor" -- '$0 ~ searchtext { print $1, $2, $3 }' 

-v參數使得searchtext$lookfor,即在bash腳本的參數-g。然後$0 ~ searchtext選擇搜索文本在行上任何位置的任何行。對於匹配行,打印前三個字段。

2

script.sh:

#!/bin/bash 
columns="" 
word="." 
for arg; do 
    if [[ $arg == "-g" ]]; then 
     shift 
     word=$1 
    else 
     columns+="$1," 
    fi 
    shift 
done 
if [[ $columns ]]; then 
    columns=${columns%,} 
else 
    columns="5-" 
fi 
grep $word affy.txt | cut -d " " -f "$columns" 
+0

好的使用'shift'解析ARGS – sofly