Nik*_*ide 1 regex bash shell grep
我有一个文件:
NAMES.DAT:
AAAA
BBBB
Run Code Online (Sandbox Code Playgroud)
text.dat:
AAAA
CTGCTTCGTCA
12127567612
BBBB
TCGACTACTAG
12331276318
CCCC
TCATCATACAT
23612763812
DDDD
GCTATCGCATC
23767263723
Run Code Online (Sandbox Code Playgroud)
我想要做的是(仅使用shell命令)从text.dat中排除这些行,这些行也存在于names.dat中,并且(最重要的是)在公共行之后有三行.
所以基本上输出应该看起来像是:
CCCC
TCATCATACAT
23612763812
DDDD
GCTATCGCATC
23767263723
Run Code Online (Sandbox Code Playgroud)
你可以用awk做到这一点:
awk 'NR==FNR {a[$0]; next} $0 in a {i=0} ++i>3' names.dat text.dat
Run Code Online (Sandbox Code Playgroud)
NR==FNR表示总记录数等于当前文件的记录号(这仅适用于第一个文件).使用行names.dat来设置数组中的键a.next跳到输入的下一行,忽略单行中的任何其他命令.每当一行text.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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1077 次 |
| 最近记录: |