如何为awk提取的指定行范围添加连续行号前缀?
问题:为awk提取的行添加连续行号
我用以下awk命令从文件中提取指定范围的内容:
buffer=`awk -v desde="$DESDE" -v hasta="$HASTA" 'NR>=desde&&NR<=hasta' "$FICH"`
该命令能正确输出指定范围的行,当前输出如下:
1:20220413:20:Curso Astrología:5:Vicente Ferrer 1:10042022:0:Donación instituto Samye:103:Propia 14:20220428:0:Candelario Yeshe Nyimpo Inc:9:Dudjom Tersar 1:20220512:60:Ayuda por el Hambre y Violencia:6:Vicente Ferrer Total Lineas: 43 | Total Pag: 2 |Buffer: De 0 hasta 26 | 27
但我希望在每行开头添加从1开始的连续行号,期望输出如下:
1 1:20220413:20:Curso Astrología:5:Vicente Ferrer 2 1:10042022:0:Donación instituto Samye:103:Propia 3 14:20220428:0:Candelario Yeshe Nyimpo Inc:9:Dudjom Tersar 4 1:20220512:60:Ayuda por el Hambre y Violencia:6:Vicente Ferrer Total Lineas: 43 | Total Pag: 2 |Buffer: De 0 hasta 26 | 27
尝试多个选项均未成功,求解决方案。
解决方案
可以在awk脚本里引入自定义计数器,仅对目标内容行添加递增行号,保留最后一行的统计信息不变。修改后的命令如下:
buffer=`awk -v desde="$DESDE" -v hasta="$HASTA" 'NR>=desde&&NR<=hasta {if($0 !~ /^ Total Lineas/) {count++; print count, $0} else {print $0}}' "$FICH"`
核心逻辑说明:
- 新增
count变量,初始默认为0,每处理一行符合范围且不是统计行的内容时,计数器自增1 - 通过正则
$0 !~ /^ Total Lineas/判断是否为最后一行统计信息,这类行直接原样输出,不添加行号 - 非统计行则输出「递增行号 + 空格 + 原行内容」
如果统计行格式可能变化,也可以通过匹配非空格开头的行来添加行号(适配更灵活的场景):
buffer=`awk -v desde="$DESDE" -v hasta="$HASTA" 'NR>=desde&&NR<=hasta {if($0 ~ /^[^ ]/) {count++; print count, $0} else {print $0}}' "$FICH"`
内容的提问来源于stack exchange,提问作者Valentin Luque
相关产品推荐
相关产品推荐

