Usando awk
, você pode corresponder à coluna 22 usando
awk '$22=="\"u\";"' a
Eu tenho um arquivo como:
Chr1 Cufflinks exon 7136 7944 . + . gene_id "XLOC_000001"; transcript_id "TCONS_00000003"; exon_number "5"; gene_name "LOC_Os01g01010"; oId "TCONS_00000003"; nearest_ref "LOC_Os01g01010.2"; class_code "="; tss_id "TSS1"; p_id "P2";
Chr1 Cufflinks exon 8028 8150 . + . gene_id "XLOC_000001"; transcript_id "TCONS_00000003"; exon_number "6"; gene_name "LOC_Os01g01010"; oId "TCONS_00000003"; nearest_ref "LOC_Os01g01010.2"; class_code "u"; tss_id "TSS1"; p_id "P2";
Eu quero buscar toda a linha, onde quer que haja um "u" em uma linha
A saída deve ser como:
Chr1 Cufflinks exon 8028 8150 . + . gene_id "XLOC_000001"; transcript_id "TCONS_00000003"; exon_number "6"; gene_name "LOC_Os01g01010"; oId "TCONS_00000003"; nearest_ref "LOC_Os01g01010.2"; class_code "u"; tss_id "TSS1"; p_id "P2";
Eu tentei grep -o "u" a >b
Usando awk
, você pode corresponder à coluna 22 usando
awk '$22=="\"u\";"' a
grep "\"u\";" a >b
também fará o trabalho.
No caso mais simples, onde você quer apenas qualquer linha que contenha "u"
, você pode fazer
grep '"u"' a > b
Se você quer ter certeza de que ele só corresponde no campo de descrição do seu arquivo gff (assumindo que este é um arquivo gff corretamente formatado com campos separados por tabulação), você pode fazer:
awk -F"\t" '$NF~/"u"/' a > b
Por fim, se você estiver interessado apenas em casos em que "u"
esteja no campo do subdomínio do campo do atributo, você poderá usar:
awk -F";" '$7~/"u"/' a > b
Você pode usar isto:
awk '$22 ~ /\"u\";/' file
Se houver um número variável de campos, conforme mencionado nos comentários, e class_code
preceder o campo obrigatório, isso poderá ser útil:
awk '{ for (i = 1; i <= NF; i++) { if ($i ~ /class_code/) { if ($(i+1) ~ /\"u\";/) { print $0; break; } } } }' file
Ou grep
para class_code "u"
:
grep 'class_code "u"' input
Tags text-processing text