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

编写Bash脚本:将多份数值文本文件按规则合并为单行文件

解决Bash脚本合并文本文件并按指定格式输出的问题

我明白你要实现的需求:把四个文本文件的内容按特定规则合并成单行,开头和中间指定位置用逗号分隔。直接用cat * > out.txt确实达不到效果,因为它只是简单拼接所有文件内容,不会帮你添加需要的分隔符,还会保留每个文件里的换行符。

这里有几种简单的方法可以实现你的目标:

方法1:分步拼接(直观易理解)

这种方法一步步构建输出内容,适合新手理解:

# 初始化输出文件,写入开头的", "
echo -n ", " > output.txt

# 依次添加File1、File2、File3的内容(去掉换行符),用空格分隔
cat File1.txt | tr -d '\n' >> output.txt
echo -n " " >> output.txt
cat File2.txt | tr -d '\n' >> output.txt
echo -n " " >> output.txt
cat File3.txt | tr -d '\n' >> output.txt

# 添加中间的" , "分隔符
echo -n " , " >> output.txt

# 添加File4的内容(去掉换行符)
cat File4.txt | tr -d '\n' >> output.txt

# 可选:添加换行符让输出文件末尾有个换行(符合文本文件规范)
echo >> output.txt

方法2:用printf一次性拼接(简洁)

如果想更简洁,可以用printf直接组合所有内容:

printf ", %s %s %s , %s\n" \
  "$(cat File1.txt | tr -d '\n')" \
  "$(cat File2.txt | tr -d '\n')" \
  "$(cat File3.txt | tr -d '\n')" \
  "$(cat File4.txt | tr -d '\n')" > output.txt

方法3:用awk处理(适合更复杂的场景)

如果以后需要处理更多文件或者更复杂的规则,awk是个不错的选择:

awk '
  BEGIN { printf ", " }
  FILENAME == "File1.txt" || FILENAME == "File2.txt" || FILENAME == "File3.txt" {
    printf "%s ", $0
  }
  FILENAME == "File4.txt" {
    printf " , %s\n", $0
  }
' File1.txt File2.txt File3.txt File4.txt > output.txt

关键说明:

  • tr -d '\n'的作用是去掉每个文件里的换行符,确保所有内容都在同一行。
  • 一定要明确指定文件顺序(比如File1.txt File2.txt ...),避免cat *可能带来的文件名排序问题(比如如果有File10.txt,排序会在File2.txt前面)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:47:29