在shell脚本中使用awk/grep搜索文本

在shell脚本中使用awk/grep搜索文本,awk,grep,Awk,Grep,我正在搜索/匹配源文件sourcefile.txt中的术语列表与目标文件target.bed中的术语列表。我想将grep'd术语及其相应的距离值打印到一个单独的输出文件中 源文件如下所示: SMOX NCOA3 EHF Chromosome PeakStart PeakEnd Distance GeneStart GeneEnd ClosestTSS_ID Symbol Strand chr20 4100204 4100378 -29134 4129425 4168394 SMOX nu

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

源文件如下所示:

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 +
目标文件如下所示:

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和距离)

我尝试了以下脚本:

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`
exec>outputfile.txt
完成`
但它不适用于我的不同源文件;我想在同一个循环中包含许多不同的源文件,但脚本只适用于第一个循环。我使用了相同的脚本,但文件名不同

我也试过:

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`
rm sourcefile_temp.txt
触摸sourcefile_temp.txt
awk'NR>1{print$1}'sourcefile.txt>sourcefile_temp.txt
exec>output.txt
完成`
这个给了我一个非常奇怪的输出


如果您有任何建议/更正/更好的方法,我们将不胜感激。

awk
脚本将完成以下工作:

$ awk 'FNR==NR{a[$1];next}FNR>1&&($7 in a){print $7,$4}' source target
SMOX -29134
NCOA3 -21075
EHF -20498

非常感谢!