쉘 스크립트에서 grep 사용

쉘 스크립트에서 grep 사용

아래와 같은 텍스트 파일이 있습니다(여기서 몇 줄이 표시됩니다).

INDEX : 1
snRNA_seq:TTTTGGAGCAGGGAGATGGAAT

miRNA_seq:CTCCTGACTCCAGGTCCTGTGT

target: RNU2-1,RNU2-64P,RNU2-37P,RNU2-61P,RNU2-68P,RNU2-26P,RNU2-57P,RNU2-59P
length: 22
miRNA: hsa-miR-378a-5p*MI0000786
length: 22


mfe: -21.3 kcal/mol

p-value: 0.015469



position  1

target 5'        U             A 3'

                  UUUGGAG CAGGG    

                  GGACCUC GUCCU    

miRNA  3' UGUGUCCU       A     C 5'





INDEX : 10
snRNA_seq:TTGGAGCAGGGAGATGGAAT

miRNA_seq:ATCCTCTCTTCCCTCCTCCCAG

target: RNU2-1,RNU2-64P,RNU2-37P,RNU2-61P,RNU2-68P,RNU2-26P,RNU2-57P,RNU2-59P
length: 20
miRNA: hsa-miR-7111-3p*MI0022962
length: 22


mfe: -24.0 kcal/mol

p-value: 0.001695



position  2

target 5'   U    C        U    A 3'

             GGAG AGGG AGA  GGA    

             CCUC UCCC UCU  CCU    

miRNA  3' GAC    C    U   CU   A 5'

1,10,20,30 등의 식별자 목록이 있습니다. 위 파일의 이 식별자는 INDEX 섹션 옆에 있습니다. 내가 하고 싶은 것은 식별자가 위의 파일과 일치하는 경우 해당 줄 + 기본적으로 grep -A 28 "INDEX :identifier"인 다음 28줄을 인쇄하는 것입니다.

쉘에서 이 작업을 어떻게 수행할 수 있습니까?

인사

답변1

원하는 식별자에 대한 고정 항목이 있으면 다음을 사용할 수 있습니다.

for identifier in 1 10 20 30; do
   grep -A 28 "INDEX : ${identifier}$" Test.txt
done

고정 식별자가 없으면 식별자를 지정하지 않고 grep을 수행할 수 있습니다.

grep -A 28 "^INDEX : " Test.txt

^여기서는 줄의 시작 부분과 일치하는 INDEX 줄을 사용 합니다 .

답변2

당신은 grep그것을 사용할 수 있습니다 -f:

   -f FILE, --file=FILE
          Obtain patterns from FILE, one per line.

identifiers하지만 이를 위해서는 그에 따라 파일 형식을 지정 해야 합니다 . 예를 들어 다음과 같아야 합니다.

INDEX : 1
INDEX : 10
..........
INDEX : 100

바꾸다:

1,10....100

as를 사용하여 so에서 패턴을 읽는 -경우 한 가지 방법은 with입니다 ( with를 사용하여 전체 줄을 일치시킬 수도 있습니다 ).FILE grepstdinawkgrep-x

awk -F, '{for (i=1; i<=NF; i++) print "INDEX : "$i}' identifiers | grep -A28 -x -f - file

즐겨 사용하는 도구를 사용하여 내부에서 편집 identifiers하고 다음을 실행하지 않는 한:

grep -A28 -x -f identifiers file

답변3

주어진 고정된 ID 하위 집합으로 데이터를 여러 번 전달하지 않으려는 경우 가능한 접근 방식은 다음과 같습니다(예: 인덱스 1, 2, 10).

sed -n '/INDEX : \(1\|2\|10\)$/,+28p'

관련 정보