Linux:显示特定字符所在的行,并统计特定字符之间的行数差(grep, awk)

举个例子,我想计算>开头的行之间的行数差距,如下截图,>开头的行分别在第1、8、18、25、32行。因此,第1、8、18、25、32行之间的行数差为7、10、7、7。

使用如下命令即可完成:
grep -n ">" file | awk 'NR==1{tmp=$1;print $1}NR>1{print $1-tmp;tmp=$1}'

其中,file指的是截图的文件;
grep -n ">" 指的是显示包含>字符的行数N;
awk 后面的命令指的是计算N-(N-1),即我们所需的行数差;

结果如下所示:

如果是多个文件的话(以fa结尾),可以考虑来个循环:

for i in *.fa; do
echo $i
grep -n ">" $i | awk 'NR==1{tmp=$1;print "'$i'"}NR>1{print $1-tmp;tmp=$1}'  >>  test
done

效果如下:

posted @ 2021-01-19 16:12  橙子牛奶糖  阅读(781)  评论(0编辑  收藏  举报