我有一个带有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个命中。 任何建议都将受到欢迎。感谢
答案 0 :(得分:2)
您也可以使用awk
:
awk '++a[$2]<=5' myfile.csv
此处,$2
=&gt;第二栏。由于文件已根据4th
列进行排序,因此将打印与每个基因(第2列)对应的前5
行。所有342个基因都将被覆盖。标题行也将保留。
答案 1 :(得分:0)
使用grep:
grep -A 4 AAEL018149 myfile.csv