단일 명령을 사용하여 grep 20000 문자열

단일 명령을 사용하여 grep 20000 문자열

이것은 첫 번째 입력입니다. 여기에는 20,000개의 문자열이 포함되어 있습니다.

X   10063445    10098579    X:10063445|10098579 
X   101020487   101021315   X:101020487|101021315   
X   101041317   101042312   X:101041317|101042312   
X   101120402   101120784   X:101120402|101120784   
X   101126709   101148161   X:101126709|101148161   
X   107088436   107088839   X:107088436|107088839   
X   110020352   110067396   X:110020352|110067396

두 번째 입력 파일 -

X   10063445    10098579    2
X   11055936    11110981    2
X   13666317    13680598    5
X   14843660    14859334    13
X   14850505    14859334    5
X   16818574    16829770    2
X   19541925    19546050    4
X   19683823    19695741    4
X   19965044    19970298    2
X   20188497    20204103    2
X   24073601    24074959    11
X   24172715    24179770    9
X   24179183    24179770    2
X   24540246    24546477    2
X   24809898    24843677    4
X   24809898    24888122    3
X   38666121    38687674    2
X   44524002    44527365    8
X   45010961    45020730    3
X   45010961    45037689    2
X   46984884    46998277    2
X   47222261    47228644    2

지금까지 두 파일을 교차하기 위해 bedtools intersect를 사용하고 있지만 교차된 결과만 제공하고 동일한 결과 파일에서도 분리를 원합니다. 나는 다음 명령을 사용합니다.

bedtools intersect -wa -wb -a input1 -b input2 -f 1 -r >intersect.bed

그래서 동일한 intersect.bed 파일에 교차되고 분리된 결과를 포함할 수 있는 방법이 있습니까? 결과를 원합니다.

X   10063445    10098579    X:10063445|10098579     X   10063445    10098579    2
X   101020487   101021315   X:101020487|101021315   
X   101041317   101042312   X:101041317|101042312   X   101041317   101042312   3
X   101120402   101120784   X:101120402|101120784   
X   101126709   101148161   X:101126709|101148161   X   101126709   101148161   4
X   107088436   107088839   X:107088436|107088839   X   107088436   107088839   4
X   110020352   110067396   X:110020352|110067396   
X   110020352   110109146   X:110020352|110109146   X   110020352   110109146   3
X   110067347   110109146   X:110067347|110109146   X   110067347   110109146   4
X   11055936    11110981    X:11055936|11110981 

그래서 여기서는 교차점과 분리점을 포함하는 이와 같은 출력을 기대합니다. 감사해요

답변1

나는 그것이 awk로 이루어질 수 있다고 확신합니다. 어쨌든 나는 질문이 마음에 듭니다. 이는 가장 시간 효율적인 솔루션이 아닙니다.

file1='file1'
file2='file2'
file_new='new_file'
file_not_matched='not_matched'
delimiter='\t' #when joining strings in the new file

true > $file_new 
true > $file_not_matched

IFS=$'\n'
#walk file1
for line1 in `cat $file1`; do
        line1_match=`echo $line1 | awk '{print $2 FS $3}'`
        echo -n "$line1" >> new_file

        #walk file2
        for line2 in `cat $file2`; do
                line2_match=`echo $line2 | awk '{print $2 FS $3}'`

            #test lines
            if [ "$line1_match" == "$line2_match" ];
                then

                    echo -e "$delimiter$line2" >> new_file
                    continue 2
            fi
        done
        echo "" >> new_file
        echo $line1 >> not_matched
done

관련 정보