2

我正在搜索/匹配源文件中的术语列表sourcefile.txt与目标文件中的术语target.bed。我想将 grep 的术语及其相应的距离值打印到单独的输出文件中。

源文件如下所示:

SMOX
NCOA3
EHF

目标文件如下所示:

Chromosome PeakStart PeakEnd Distance GeneStart GeneEnd ClosestTSS_ID   Symbol  Strand
chr20 4100204 4100378 -29134 4129425 4168394 SMOX null +
chr20 6234586 46234754 -21075 46255745 46257534 NCOA3 null +
chr11 34622044 34622238 -20498 34642639 34668098 EHF >null +

包含 grep 文本的输出文件(ClosestTSS_ID 和距离)

SMOX -29134
NCOA -21075
EHF -20498

我试过这个脚本:

exec < sourcefile.txt
while read line
do
genes=$(echo $line| awk '{print $1}')
grep -w "genes" targetfile.bed | awk '{print $4,$7}' >> outputfile.txt
done`

但它不适用于我的不同源文件;我想在同一个循环中包含许多不同的源文件,但该脚本仅适用于第一个。我使用了相同的脚本,但文件名不同。

我也试过这个:

rm sourcefile_temp.txt
touch sourcefile_temp.txt
awk 'NR>1{print $1}' sourcefile.txt > sourcefile_temp.txt
exec < sourcefile_temp.txt
while read line
do
set $line
sourcefilevar=`grep $1 targetfile.bed| cut -f4| cut -f7`
echo $line $tssmoq2 >> output.txt
done`

这给了我一个非常奇怪的输出。

任何建议/更正/更好的方法将不胜感激。

4

1 回答 1

2

这个awk脚本将完成这项工作:

$ awk 'FNR==NR{a[$1];next}FNR>1&&($7 in a){print $7,$4}' source target
SMOX -29134
NCOA3 -21075
EHF -20498
于 2013-04-29T15:33:50.700 回答