Chinaunix
标题:
如何提取特定符号行中的关键字并输出随后几行
[打印本页]
作者:
tingshuibanxia
时间:
2016-07-25 11:46
标题:
如何提取特定符号行中的关键字并输出随后几行
请教大家,例如有文件A是这样:
>H1_22 ASDSF
AA
BB 1111
ASDSJFKJKDJF
DSJFKDJFDJDFDFD
>F2_44_3 SDKS BB DF 2323
DFDSFDDGJFGLJFLDL
>SDS_22 DFD
AA
FDD 1111
FDSFDSFDGDG
FDFDSFDGFDGTHTYU
FDGRFHHHHHHHHHH
.......
如何将以>号开头的行中第3列为AA的行以及随后的几行提取出来?
生成这样:
>H1_22 ASDSF
AA
BB 1111
ASDSJFKJKDJF
DSJFKDJFDJDFDFD
>SDS_22 DFD
AA
FDD 1111
FDSFDSFDGDG
FDFDSFDGFDGTHTYU
FDGRFHHHHHHHHHH
作者:
elu_ligao
时间:
2016-07-25 11:58
awk '/>/{f=$3=="AA"?1:0}f'
复制代码
作者:
tingshuibanxia
时间:
2016-07-25 12:02
回复
2#
elu_ligao
谢谢,请问?1:0如何理解?
作者:
moperyblue
时间:
2016-07-25 12:12
本帖最后由 moperyblue 于 2016-08-05 22:25 编辑
awk -vRS='>' '$3=="AA"{printf RS $0}'
awk '/^>/{f=$3=="AA"}f'
grep -oPz '>(\S+\s+){2}AA [^>]*'|awk NF
sed '/>/i \\'|sed -r '/^>(\S+\s+){2}AA\s/{:a;N;/\n$/!{$!ba};s/\n$//;p};d'
sed -r ':b;/^>(\S+\s+){2}AA\s/{:a;N;/\n>/!{$q;ba};h;s/(.*)\n(.*)/\1/p;g;s//\2/;bb};d'
复制代码
作者:
sunzhiguolu
时间:
2016-07-25 13:05
perl -ane 'if(/>/){print if($P=$F[2] eq "AA" ? 1 : 0);next}print if($P)' f
复制代码
>H1_22 ASDSF AA BB 1111
ASDSJFKJKDJF
DSJFKDJFDJDFDFD
>SDS_22 DFD AA FDD 1111
FDSFDSFDGDG
FDFDSFDGFDGTHTYU
FDGRFHHHHHHHHHH
作者:
Herowinter
时间:
2016-07-25 13:53
回复
3#
tingshuibanxia
http://baike.baidu.com/link?url=fqmORbuZS4ZF9quGfaEFyrBEj7b5dNCwnHU1dAcLcA5rCM8ak-z73KwG5_NO-Rhx-ETfFrcLANzBAioebCbFma
作者:
ll104567
时间:
2016-07-25 14:13
awk '/>/{if($3=="AA"){a=1}else{a=0}}a'
给你翻译一下那个三目运算- -
顺手摸一下5楼pp
=================================防摸pp隔离带=======================================
作者:
sunzhiguolu
时间:
2016-07-25 14:59
作者:
99超人
时间:
2016-07-25 15:07
提示:
作者被禁止或删除 内容自动屏蔽
作者:
请叫我俊哥哈
时间:
2016-07-25 15:58
回复
4#
moperyblue
我想请问下,你的第三个代码,就是当匹配到/\n>/,然后保存到保存空间,然后这里的替换 s/(.*)\n(.*)/\1/
是
>H1_22 ASDSF AA BB 1111
ASDSJFKJKDJF
DSJFKDJFDJDFDFD
>F2_44_3 SDKS BB DF 2323
替换成这个吗?
>H1_22 ASDSF AA BB 1111
ASDSJFKJKDJF
DSJFKDJFDJDFDFD
作者:
moperyblue
时间:
2016-07-25 16:02
回复
10#
请叫我俊哥哈
对
作者:
我叫萌萌
时间:
2016-07-25 17:35
本帖最后由 我叫萌萌 于 2016-07-25 17:36 编辑
sed -n '/AA/,+1p' +1p 1 代表着你的输出后几行
作者:
jcdiy0601
时间:
2016-07-26 09:26
awk 'BEGIN{RS=">"}{if($3=="AA")printf RS $0}' file
复制代码
作者:
feiyu2994
时间:
2016-07-26 12:42
学习了,感谢分享
作者:
OS_unix
时间:
2016-07-26 12:55
grep -oPz '>.*AA[^>]+(?=\n)'
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2