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

bash read -ra处理长字符串时丢失数组末尾元素

Bash脚本处理长字符串转数组时末尾元素丢失问题

我用bash脚本的read -ra命令将长分隔字符串转换为数组,小长度字符串处理正常,但处理含6561个元素(135726字符)的字符串时,数组末尾元素丢失。

我的需求是将ExodusII格式的ASCII文件转换为gnuplot可用的xyz格式,输入文件格式如下:

coordx = 1, 1.0125, 1.0125, 1, 1.00625, 1.0125, 1.00625, 1, 1.00625, 1.025,
    1.025, 1.01875, 1.025, 1.01875, 1.01875, 1.0375, 1.0375, 1.03125, 1.0375,
[snip]
    1.46875, 1.4875, 1.4875, 1.48125, 1.48125, 1.5, 1.5, 1.49375, 1.49375 ;

 coordy = 1, 1, 1.0125, 1.0125, 1, 1.00625, 1.0125, 1.00625, 1.00625, 1,
    1.0125, 1, 1.00625, 1.0125, 1.00625, 1, 1.0125, 1, 1.00625, 1.0125,
[snip]
    1.49375, 1.5, 1.49375, 1.5, 1.49375, 1.5, 1.49375, 1.5, 1.49375 ;

 vals_nod_var1 =
  1.50711777303835e-07, 4.54731383295358e-07, 1.4039653539437e-06,
    4.54743954548528e-07, 3.02721580299597e-07, 9.29348368619529e-07,
[snip]
    -1.08946977710559e-10, -1.40259016278983e-10 ;

计划将每个列表读取到单独数组(coordx[$i]、coordy[$i]、values[$i]),输出格式为:

coordx[1]   coordy[1]   vals[1]
  coordx[2]   coordy[2]   vals[2]

脚本中出现问题的部分如下:

str_vals=$(sed -n "$startline_v,$endline_v p" "$file" | xargs)
IFS=', ' read -ra vals <<< "$str_vals"
str_coordx=$(sed -n "$startline_x,$endline_x p" "$file" | xargs)
IFS=', ' read -ra coordx <<< "$str_coordx"
str_coordy=$(sed -n "$startline_y,$endline_y p" "$file" | xargs)
IFS=', ' read -ra coordy <<< "$str_coordy"

sed命令可正确将列表转为, 分隔的字符串,用wc -w验证长度正确(会读取到coordx、=、;等无用元素,打印时会丢弃)。

处理441元素的输入文件时脚本正常,但处理6561元素的数据集时,coordx和coordy数组正常,而${#vals[@]}仅为6355,vals[6354]之后的元素为空。

未发现输入文件对应位置有特殊字符终止read命令,仅vals字符串字符数更多。排查ARG_MAX(本机为6291456),str_vals仅135726字符,未超出限制。系统为Kubuntu 22.04,寻求解决建议。


内容的提问来源于stack exchange,提问作者Andrew L Cooksy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:21:20