我正在搜索/匹配源文件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 +
包含grep'd文本(ClosestTSS_ID和Distance)
的输出文件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`
这个给了我一个非常奇怪的输出。
任何建议/更正/更好的方法都会非常感激。
答案 0 :(得分:2)
这个awk
脚本将完成这项工作:
$ awk 'FNR==NR{a[$1];next}FNR>1&&($7 in a){print $7,$4}' source target
SMOX -29134
NCOA3 -21075
EHF -20498