2013-04-29 5 views
2

내 소스 파일 sourcefile.txt의 용어 목록을 내 대상 파일 target.bed의 용어 목록으로 검색/일치시키고 있습니다. grep'd 용어를 해당 거리 값과 함께 출력 파일에 출력하려고합니다.쉘 스크립트에서 awk/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'd 텍스트 (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` 

이 하나가 나에게 정말 이상한 출력을 제공합니다.

제안/수정/더 좋은 방법은 대단히 감사하겠습니다.

답변

2

awk 스크립트는 작업을 수행합니다

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

아주 아주 아주 많이 감사를! – user1879573

관련 문제