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

如何按规则拼接目录中CSV文件名:同组逗号分隔,组间空格分隔

按前缀分组CSV文件并格式化输出

你现在的脚本只是简单把所有CSV文件用逗号拼接在一起,没有区分不同前缀的文件组。我们需要先识别每个文件的共同前缀,再把同前缀的文件用逗号连接,不同组之间用空格分隔。这里有两种实用的解决方案:

方案一:Bash循环+参数扩展(可读性高)

这个方案逻辑清晰,通过提取前缀、去重、分组三步完成需求,容易理解和修改:

#!/bin/bash

# 初始化结果变量
output=""

# 获取所有唯一的文件前缀(去掉最后一个下划线及之后的部分)
unique_prefixes=$(for file in *.csv; do echo "${file%_*.csv}"; done | sort -u)

# 遍历每个前缀,生成对应的文件组
for prefix in $unique_prefixes; do
    # 找到当前前缀的所有CSV文件,用逗号连接
    file_group=$(ls "${prefix}"_*.csv | tr '\n' ',' | sed 's/,$//')
    # 将当前组添加到输出结果,用空格分隔
    output="${output} ${file_group}"
done

# 移除开头多余的空格并输出最终结果
echo "${output# }"

代码细节说明:

  • ${file%_*.csv}:Bash参数扩展语法,从文件名末尾删除最短匹配的_*.csv模式,精准提取出usa_la2_sky这类共同前缀。
  • sort -u:对提取的前缀排序并去重,确保每个前缀只被处理一次。
  • tr '\n' ',':把ls输出的每行文件名转换成逗号分隔的字符串。
  • sed 's/,$//':移除字符串末尾多余的逗号,避免分组后出现无效的 trailing comma。
  • ${output# }:移除结果开头的空格,避免第一个文件组前出现多余空格。

方案二:Awk单行命令(简洁高效)

如果偏好更紧凑的写法,可以用Awk一次性完成分组和格式化:

ls *.csv | awk -F'_' '{prefix = $1 "_" $2 "_" $3} {groups[prefix] = groups[prefix] ? groups[prefix] "," $0 : $0} END {for (p in groups) printf "%s ", groups[p]; print ""}' | sed 's/ $//'

代码细节说明:

  • -F'_':用下划线作为字段分隔符,把文件名拆分成多个部分。
  • prefix = $1 "_" $2 "_" $3:根据你的文件名格式(前缀_序号.csv),拼接前三个字段得到唯一前缀。
  • groups[prefix] = ...:用数组存储每个前缀对应的文件组,已有内容时追加逗号和新文件名,否则直接赋值当前文件名。
  • END块:遍历数组输出所有分组,用空格分隔,最后用sed移除末尾多余的空格。

运行以上任意一种方案,都能得到你期望的输出:

usa_la2_sky_1.csv,usa_la2_sky_2.csv usa_nyc1_sky_1.csv,usa_nyc1_sky_2.csv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:24:10