我需要通过一组数据搜索样本列表,如何自动编写
例如,数据位于/home/.../datasetname
,我有样本:bob 54
,alice 55
等。我想搜索datasetname
下的所有压缩文件并使用bob
和54
提取行,并使用alice
和55
提取行。
当我为一个样本执行此操作时,我写道:
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
答案 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" }
'