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

如何在Solaris 10的KSH中按重复模式打印长文件指定行?

在Solaris 10 KSH中用nawk/sed实现周期性行筛选

针对你需要从长文件中重复打印第1、2、3、4、7行,跳过5、6、8、9行直到文件末尾的需求,这里提供两种适配Solaris 10环境的实现方案:

1. nawk方案(推荐,逻辑更清晰)

利用nawk的行号变量NR,通过对9取模来判断当前行是否处于需要保留的位置。我们把每9行作为一个周期,需要保留的行在周期内的位置是第1、2、3、4、7位,对应的模运算实现如下:

nawk '((NR - 1) % 9) ~ /^[01236]$/' your_input_file.txt

原理说明:

  • (NR - 1) % 9 将行号转换为0-8的周期索引(第1行→0,第2行→1,…,第7行→6,第9行→8)
  • 索引为0、1、2、3、6对应的正是我们需要保留的行,通过正则匹配筛选这些行并打印

如果你偏好更直白的条件判断,也可以用这种写法,可读性更强:

nawk '((NR-1)%9 == 0) || ((NR-1)%9 == 1) || ((NR-1)%9 == 2) || ((NR-1)%9 == 3) || ((NR-1)%9 == 6)' your_input_file.txt

2. sed方案(适配Solaris 10原生sed)

Solaris 10的原生sed不支持GNU sed的~步长语法,所以我们用基础的p(打印)和n(读入下一行)命令来模拟周期筛选:

sed -n 'p;n;p;n;p;n;p;n;n;n;p;n;n' your_input_file.txt

原理说明:

这个命令的执行流程对应每9行的处理逻辑:

  1. p → 打印第1行;n → 跳至第2行
  2. p → 打印第2行;n → 跳至第3行
  3. p → 打印第3行;n → 跳至第4行
  4. p → 打印第4行;n → 跳至第5行
  5. n → 跳至第6行;n → 跳至第7行
  6. p → 打印第7行;n → 跳至第8行
  7. n → 跳至第9行;此时进入下一个周期,从第10行重复上述操作

即使文件末尾不足9行,这个命令也会正确处理剩余的行(比如最后只剩3行,会正常打印这3行)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:45:27