2

我整个早上都在努力思考如何做我想做的事,但是……我开始感到绝望!

我在 .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 $@ | 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

谢谢!

4

2 回答 2

2

脚本.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"
于 2013-10-16T15:24:55.897 回答
0

您希望您的 awk 脚本了解来自-g. 要将值传递到脚本中,我-vgawk. 一旦您在脚本中的变量lookfor(例如,使用getopt)中有 -g 的参数,运行:

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

-v参数使searchtext引用$lookfor,即bash 脚本中的参数-g。然后$0 ~ searchtext选择搜索文本位于该行任何位置的任何行。对于匹配行,打印前三个字段。

于 2013-10-16T13:39:47.523 回答