合并含指定字符串文件名的文件时数据重复9次的原因咨询
为什么合并文件时内容会重复写入?
嘿,这个问题我太熟了!十有八九是你写脚本的时候不小心搞了嵌套循环——就是外层循环和内层循环都在遍历那几个目标文件,导致每个文件被重复读取写入了number_of_files次(3×3=9,刚好和你说的每个文件写9次完全对上)。
你大概率踩了这个坑
举个例子,假设你的脚本是类似这样的(拿shell脚本举例):
number_of_files=3 # 外层循环跑3次 for i in $(seq 1 $number_of_files); do # 内层循环又跑3次,每次把3个文件都写一遍 for j in $(seq 1 $number_of_files); do cat FOO$j.TXT >> target.txt done done
这样外层循环执行3轮,每一轮内层循环都会把FOO1到FOO3全写一遍,最终每个文件的内容就被重复了3次,总共9次写入,完美符合你描述的“1、2、3、1、2、3……”循环重复的现象。
怎么改?用单层循环就搞定
只需要遍历一次所有目标文件,把它们依次追加到目标文件里就行:
number_of_files=3 for i in $(seq 1 $number_of_files); do cat FOO$i.TXT >> target.txt done
如果你的文件名规律统一,甚至可以不用循环,直接用通配符更简洁:
cat FOO*.TXT >> target.txt
这样每个文件只会被读取并写入一次,就不会有重复内容了。
额外排查小tip
如果不是嵌套循环的问题,那可以检查下是不是每次循环都没有正确重置文件读取指针?不过这种情况在常见的脚本语言(比如shell、Python)里很少见,绝大多数情况还是循环嵌套导致的重复遍历。
内容的提问来源于stack exchange,提问作者physlexic
相关产品推荐
相关产品推荐

