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

如何对目录下ASCII文件按文件名数字排序后横向拼接并补零对齐列

实现方案

1. 正确排序文件名

你之前的sort -V无法满足要求的核心原因是默认会优先匹配文件名前缀字符,我们需要明确提取文件名末尾的数字作为排序依据,命令如下:

# 生成按末尾数字升序排列的文件名列表
sorted_files=$(ls data_*_* | awk -F'_' '{print $NF,$0}' | sort -n | cut -d' ' -f2-)

执行后得到的文件名顺序就是你预期的data_Z_1、data_E_45、data_N_457。

2. 计算所有文件的最大行数

# 统计所有文件的行数,取最大值
max_line=$(wc -l $sorted_files | sort -n | tail -2 | head -1 | awk '{print $1}')

3. 对短文件末尾补0.0对齐最大行数

# 遍历每个排序后的文件,生成补零后的临时文件
idx=0
for f in $sorted_files; do
    awk -v max="$max_line" '{print} END{for(i=NR+1;i<=max;i++) print "0.0"}' "$f" > "tmp_$idx"
    idx=$((idx+1))
done

4. 横向拼接所有文件得到最终结果

# 拼接临时文件,输出到最终结果文件
paste tmp_* > final_result.txt

# 如果需要用空格对齐成等宽列,可以替换为下面的命令
# paste tmp_* | column -t > final_result.txt

5. 清理临时文件

rm tmp_*

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:15:04