2017-02-15 13 views
0

У меня есть использование AWK, использование Grep труба получить содержимое, мы будем называть (часть содержимого в моем файле):AWK труба совпадающей содержание

LOC_Os04g47290 
LOC_Os04g53190,LOC_Os04g53195 
LOC_Os09g20260 

Я хочу использовать содержимое Grep или получить совпавшее содержание и другие в B (часть содержимого в моем файле):

_O2 int381,int382,int384,int385,int386,int387,int388,int391,int392,int393,int394,int395,int396,int397,int398,int399,int400,int401,int402,int403,int404,int408,int409,int410,int412,int413,int414:chr4:31119012..31944575 chr4:31669055..31674598 LOC_Os04g53190,LOC_Os04g53195 CPuORF12,expressed - conserved peptide uORF-containing transcript, expressed ; protein ;  PF01593 Amino_oxidase 0.0539946 

, когда я использую

cat a|awk -F"," '{for (i=1;i<=NF;i++)print $i}'|grep -f - B|grep PF|awk '{print $4"\t"$(NF-2)}' 

я получу

LOC_Os04g53190,LOC_Os04g53195 PF01593 

Но я хочу, чтобы напечатать

LOC_Os04g53190 PF01593 
    LOC_Os04g53195 PF01593 
+2

Не размещать код, как изображения, это не для поиска и мы не можем скопировать/вставить его в ответы –

+1

Ваш вопрос непонятен. Какая именно ваша трудность? Что вы пробовали до сих пор? Каков ваш вклад и ожидаемый результат? –

+1

Извините, я изменился. – zychen

ответ

0

Пример файла

sharad$ cat sample_file 
foo 
bar 
sharad$ 

Захват соответствие содержимого в переменную

sharad$ match=$(cat sample_file | grep foo) 

Захват несоответствующий содержимое в другой переменной

sharad$ non_match=$(cat sample_file | grep -v foo) 
sharad$ 

Проверьте содержимое согласования и несовпадающих переменных (Grep -v)

sharad$ echo $match 
foo 
sharad$ echo $non_match 
bar 
sharad$ 

От человека ГРЭП

-v, -invert-match Выбранные строки - это те, которые не соответствуют ни одному из указанные шаблоны.

+0

'cat' здесь не нужен, может быть просто' grep 'foo' sample_file', см. Https://sanctum.geek.nz/arabesque/useless-use-of-cat/ – Inian

+1

Согласен :) Я использовал кошку только для того, чтобы выровняйтесь с вопросом, в котором говорится, что o/p передается по трубопроводу в grep. – Sharad

+0

спасибо, но мой вопрос не тот. – zychen

1

Улучшение awk последнего утверждения

cat a | 
awk -F"," '{for (i=1;i<=NF;i++)print $i}' | 
grep -f - B | 
grep PF | 
awk '{n=split($4,v,","); for(i=1; i<=n; ++i) print v[i]"\t"$(NF-2)}' 

вы получите,

LOC_Os04g53190 PF01593 
LOC_Os04g53195 PF01593 

бонуса: AWK единственным решения

awk ' 
    NR==FNR{d[$1]; next} 
    $(NF-2) ~ /^PF/{ 
     n=split($4,v,",") 
     for(i=1; i<=n; ++i) if(v[i] in d) print v[i]"\t"$(NF-2) 
    } 
' RS="[\n,]" a RS="\n" B 
+1

Я новичок. Большое спасибо! Awk так здорово! – zychen