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 と 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`

これは私に本当に奇妙な出力を与えます。

これを行うための提案/修正/より良い方法は大歓迎です。

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 に答える