用于从Bash中的数据集中搜索多个样本的脚本

时间:2015-11-18 20:09:20

标签: bash

我需要通过一组数据搜索样本列表,如何自动编写

例如,数据位于/home/.../datasetname,我有样本:bob 54alice 55等。我想搜索datasetname下的所有压缩文件并使用bob54提取行,并使用alice55提取行。

当我为一个样本执行此操作时,我写道:

zcat datasetname* | grep "bob" | grep "54"> ~/bob54.txt

当我为两个样本执行此操作时,我写道:

zcat datasetname* | grep "bob" | grep "54"> ~/bob54.txt

zcat datasetname*| grep "alice" | grep "55">~/alice55.txt

我想编写能够为n个样本自动完成此过程的代码。

我可以直接联系Talia.Kohen@gmail.com

3 个答案:

答案 0 :(得分:0)

我们可以在awk和一些管道的帮助下完成此操作 - 这不是最有效的方法,但看看它是否足够快以解决您的问题:

zcat datasetname* | awk '{print "echo '\''"$0"'"'"' >> "$1$2".txt"}' | bash

答案 1 :(得分:0)

如果我了解您的问题,您需要一个脚本来搜索文件夹内所有文件中的某些字段,并将结果存储在文件中。

以下脚本采用三个输入变量:文件夹,第一个和第二个字段。我编写了最小的命令集,这意味着没有对参数数量进行测试等等。

#!/bin/bash

# folder to search for F1 and F2
DIR=$1
# fields to search
F1=$2
F2=$3

#for each file in the folder, search and store matching lines
filelist=$(ls -1 ${DIR})

for file in ${filelist}
    do 
        echo "searching $F1 && $F2 in $file"
        # search the two fields and store the line
        line=$(zcat $file | grep "$F1" | grep "$F2")
        # if line is not empty, append to file 
        if [ -n "$line" ] 
            then
                echo "$line" >> "$F1$F2".txt
        fi
    done 

答案 2 :(得分:0)

尝试awk

zcat datasetname* | awk '
    /bob/   && /54/  { print > "bob54.txt" }
    /alice/ && /55/  { print > "alice54.txt" }
'