シェルスクリプトで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からパターンを読み取る-場合、1つの方法は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'

関連情報