You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定位文本中首次出现连续两行null的起始行号?

查找文本中首次连续两行null的起始行号

需求说明

需要定位文本文件中首次出现连续两行值为null的起始行号。以下是示例输入:

It's My Life - Bon Jovi
It's My Life - Bon Jovi
It's My Life - Bon Jovi
null
When Doves Cry (Mixed) - Prince & The Revolution
When Doves Cry (Mixed) - Prince & The Revolution
When Doves Cry (Mixed) - Prince & The Revolution
The Sign - Ace of Base
The Sign - Ace of Base
null
null
null
null
null
null
null
It's Tricky - Run-DMC
It's Tricky - Run-DMC
The Tide Is High - Blondie
The Tide Is High - Blondie
null
null
null
Plush - Stone Temple Pilots
Plush - Stone Temple Pilots

该示例中,首次连续两行null的起始行号为10,是期望输出结果。

当前问题

使用命令 grep -n -A2 "null" trim.log | cut -f1 -d: 会输出大量冗余内容,无法直接得到目标行号:

4
5-When Doves Cry (Mixed) - Prince & The Revolution
6-When Doves Cry (Mixed) - Prince & The Revolution
--
10
11
12
13
14
15
16
17-It's Tricky - Run-DMC
18-It's Tricky - Run-DMC
--
21
22
23
24-Plush - Stone Temple Pilots
25-Plush - Stone Temple Pilots

解决方案

方法1:使用awk(推荐)

awk适合处理行关联的匹配逻辑,直接定位首次连续两行null的起始行号:

awk 'prev == "null" && $0 == "null" {print NR-1; exit} {prev = $0}' trim.log

逻辑说明:

  • prev == "null" && $0 == "null":判断当前行和上一行内容均为null
  • print NR-1:输出连续两行的起始行号(当前行号NR减1)
  • exit:找到第一个匹配项后立即退出,确保只输出首次出现的结果
  • {prev = $0}:将当前行内容存入变量prev,供下一行判断使用

方法2:改进grep+awk组合

如果偏好使用grep工具,可以结合awk过滤出目标行号:

grep -n "null" trim.log | awk '$1 == prev+1 {print prev; exit} {prev=$1}' FS=":"

逻辑说明:

  1. grep -n "null" trim.log:先提取所有null行的行号和内容
  2. awk '$1 == prev+1 {print prev; exit} {prev=$1}' FS=":":以冒号为分隔符,判断当前行号是否是上一行号+1,满足则输出上一行号并退出

内容的提问来源于stack exchange,提问作者khofm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 01:28:33