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

Bash中计算文本文件内指定数组的大小 不存在则返回-1

问题描述

现有一个文本文件,文件中有时(并非始终)会包含一个名称唯一的数组,单行格式示例如下:

unique_array=(1,2,3,4,5,6)

需求为:当该数组存在时,获取数组的大小(例如上述示例中数组大小为6);若数组不存在,则跳过处理或返回-1。

目前使用grep命令仅能判断数组是否存在,无法实现数组大小的统计。需要注意数组支持两类特殊书写格式:

  • 数组可跨多行书写,示例如下:
unique_array=(1,2,3,
   4,5,6,
7,8,9,10)
  • 数组元素可包含负数值,示例如下:
unique_array=(1,2,-3,
   4,5,6,
7,8,-9,10)
实现方案

直接用以下shell逻辑即可兼容所有场景,无需额外依赖:

#!/bin/bash
# 替换为实际要处理的文件路径
file_path="test.txt"

# 跨行提取数组完整内容:从unique_array=(起始位置开始读取,直到遇到闭合的)停止
array_block=$(awk '/unique_array=/{match_start=1; sub(/^.*unique_array=\(/, "(")} match_start{print; if(/\)/) exit}' "$file_path")

if [ -z "$array_block" ]; then
    # 未找到目标数组,返回-1
    echo -1
else
    # 清理括号、所有空白字符(空格、制表、换行),按逗号拆分后统计有效元素个数
    element_count=$(echo "$array_block" | tr -d '[:space:]()' | tr ',' '\n' | grep -v '^$' | wc -l)
    echo $element_count
fi

逻辑说明

  • 用awk标记位模式解决跨行匹配问题,不会误读数组定义外的其他文件内容
  • 统计阶段先过滤所有无效符号,再按逗号拆分元素,自动兼容负数格式、元素前后多余空格、末尾多余逗号的边缘场景
  • 未匹配到数组定义时直接返回-1,符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 11:30:44