编写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
相关产品推荐
相关产品推荐

