Sed命令找到多个模式并打印模式的行和后面的第n行

时间:2015-06-02 05:47:42

标签: string sed

我有一个带有43075行和7列的制表符分隔文件。我按第4列从最高到较小的值对文件进行了排序。现在我需要找到342个基因,哪些ID位于第2列。见下面的例子:

miR Target  Transcript  Score   Energy  Length miR  Length target
aae-bantam-3p   AAEL007110  AAEL007110-RA   28404   -565.77 22  1776
aae-let-7   AAEL007110  AAEL007110-RA   28404   -568.77 21  1776
aae-miR-1   AAEL007110  AAEL007110-RA   28404   -567.77 22  1776
aae-miR-100 AAEL007110  AAEL007110-RA   28404   -567.08 22  1776
aae-miR-11-3p   AAEL007110  AAEL007110-RA   28404   -564.03 22  1776
.
.
.
aae-bantam-3p   AAEL018149  AAEL018149-RA   28292   -569.7  22  1769
aae-bantam-5p   AAEL018149  AAEL018149-RA   28292   -570.93 23  1769
aae-let-7   AAEL018149  AAEL018149-RA   28292   -574.26 21  1769
aae-miR-1   AAEL018149  AAEL018149-RA   28292   -568.34 22  1769
aae-miR-10  AAEL018149  AAEL018149-RA   28292   -570.08 22  1769

每个基因有124行。但是,我想提取每个的热门命中,例如自文件排序以来的前5个基因。我可以使用以下脚本为一个基因做到这一点:

sed -n '/AAEL018149/ {p;q}' myfile.csv > top-hits.csv

但是,它只打印匹配的行。我想知道我是否可以使用脚本同时获取所有342个基因。如果我能得到比赛的线和接下来的4.那么我将获得每个基因的前5个命中。 任何建议都将受到欢迎。感谢

2 个答案:

答案 0 :(得分:2)

您也可以使用awk

awk '++a[$2]<=5' myfile.csv

此处,$2 =&gt;第二栏。由于文件已根据4th列进行排序,因此将打印与每个基因(第2列)对应的前5行。所有342个基因都将被覆盖。标题行也将保留。

答案 1 :(得分:0)

使用grep:

grep -A 4 AAEL018149 myfile.csv