我有一个文件:
名称。日期:
AAAA
BBBB
text.dat:
AAAA
CTGCTTCGTCA
12127567612
BBBB
TCGACTACTAG
12331276318
CCCC
TCATCATACAT
23612763812
DDDD
GCTATCGCATC
23767263723
我想做的是(仅使用shell命令)从text.dat中排除那些也出现在name.dat中的行以及(最重要的是)在公共行之后加三行。
所以基本上输出应该看起来像:
CCCC
TCATCATACAT
23612763812
DDDD
GCTATCGCATC
23767263723
您可以使用awk执行此操作:
awk 'NR==FNR {a[$0]; next} $0 in a {i=0} ++i>3' names.dat text.dat
NR==FNR
表示总记录号等于当前文件的记录号(仅对于第一个文件为真)。使用的行names.dat
设置数组中的键a
。next
跳过输入的下一行,而忽略单行代码中的任何其他命令。每当intext.dat
中的行与的元素匹配时a
,计数器i
就会重置为0。仅当i
大于3时才打印行。
测试一下:
$ awk 'NR==FNR {a[$0]; next} $0 in a {i=0} ++i>3' names.dat text.dat
CCCC
TCATCATACAT
23612763812
DDDD
GCTATCGCATC
23767263723
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句