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

Shell脚本:如何按多字符分隔符拆分多行大文件?

按多字符分隔符拆分文件为数组的解决方案

针对IFS仅支持单字符分隔符的限制,以下是几种实用的shell工具方案,可直接实现按多字符分隔符拆分大文件并生成数组:

方法1:使用awk拆分并导入数组

awk的字段分隔符FS支持多字符字符串,是处理这类需求的高效工具:

# 定义目标多字符分隔符
DELIMITER="2024-01-18"
# 拆分文件并将非空结果存入数组
readarray -t result_array < <(awk -v delimiter="$DELIMITER" 'BEGIN{FS=delimiter}{for(i=1;i<=NF;i++) if($i != "") print $i}' your_large_file.txt)
  • 细节说明:awk按指定分隔符拆分每行内容,遍历过滤掉空字段后逐行输出;readarray -t将输出内容存入数组result_array,-t参数自动移除每行末尾的换行符。

方法2:用sed替换分隔符为换行后导入数组

通过sed将多字符分隔符全局替换为换行符,再读取结果到数组:

DELIMITER="2024-01-18"
# 替换分隔符并过滤空行,最终存入数组
readarray -t result_array < <(sed "s/$DELIMITER/\n/g" your_large_file.txt | sed "/^$/d")
  • 细节说明:第一个sed命令将所有分隔符替换为换行,第二个sed命令过滤空行,避免数组出现空元素;若分隔符包含正则特殊字符(如.、+),需在sed中添加转义(例:\.)。

方法3:使用perl处理复杂分隔场景

perl的正则处理更灵活,可自动转义分隔符中的特殊字符,适合复杂场景:

DELIMITER="2024-01-18"
readarray -t result_array < <(perl -F"\Q$DELIMITER\E" -ane 'foreach $item (@F) { print "$item\n" if $item ne "" }' your_large_file.txt)
  • 细节说明:-F"\Q$DELIMITER\E"指定分隔符,\Q\E自动转义正则元字符;遍历拆分后的字段,仅输出非空内容,最后导入数组。

额外提示

如果处理的是超大文件,一次性将所有内容存入数组可能占用过多内存,可考虑在awk/perl中直接处理每个字段,而非先存入数组,降低内存消耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:32:17