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

使用BASH对TXT文件中分隔符存储的表格按电话号码排序

解决BASH下按指定字段排序分隔符拼接表格数据的问题

问题场景

你的TXT文件里所有表格行的字段用|拼接成了单一行,每4个字段(3个|分隔符)对应一行原始数据,需要按每行的第3个字段(电话号码)升序排序,同时保留每行字段的关联性,最终存入文件。

可行解决方案

直接用sed+awk+sort的组合就能搞定,比手动模拟二维数组或用cut循环简单太多,分两种输出需求给出命令:

1. 输出为每行4个字段的格式化表格

如果需要输出成每行一条记录的清晰格式,执行以下命令:

sed 's/ | /|/g' input.txt | awk -F'|' '{
    for (i=1; i<=NF; i+=4) {
        printf "%s|%s|%s|%s\n", $i, $(i+1), $(i+2), $(i+3)
    }
}' | sort -t'|' -k3,3n | sed 's/|/ | /g' > sorted_formatted.txt
  • 第一步sed:把|替换成单一|,避免字段内空格干扰分割
  • awk:按|分割所有字段,每4个字段组成一行输出
  • sort:以|为分隔符,按第3个字段(电话号码)数值升序排序
  • 最后一步sed:把|换回原来的|格式,结果存入sorted_formatted.txt

2. 输出为和原输入一致的单行长字符串

如果需要保持原输入的单行长字符串格式,执行:

sed 's/ | /|/g' input.txt | awk -F'|' '{
    for (i=1; i<=NF; i+=4) {
        printf "%s|%s|%s|%s|", $i, $(i+1), $(i+2), $(i+3)
    }
}' | sort -t'|' -k3,3n | tr '\n' ' ' | sed 's/|/ | /g; s/ | $//' > sorted_single_line.txt
  • 前几步和上面一致,tr '\n' ' '把排序后的多行合并成一行
  • 最后sed还原分隔符并去掉末尾多余的|,结果存入sorted_single_line.txt

为什么不用BASH数组或cut循环?

BASH原生对多维数组的支持很差,手动用cut循环存储字段容易出错,尤其是处理带空格的字段时,而awk天生擅长字段拆分和批量处理,搭配sort的排序能力,能快速搞定这类需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:50:42