我目前正在尝试调试涉及创建 feat.scp 文件的脚本的一部分。
该文件通常这样做
for n in $(seq $nj); do
cat $mfccdir/raw_mfcc_$name.$n.scp || exit 1;
done > $data/feats.scp || exit 1
但是我已手动将该文件raw_mfcc_$name.$n.scp
粘贴到$data
并将其重命名为feats.scp
。
这与 for 循环所做的有什么不同吗?
答案1
首先让我们来看一下循环。循环应该遍历$nj
变量给出的一定范围的数字,并在每次迭代中打印raw_mfcc_$name.1.scp
,raw_mfcc_$name.2.scp
依此类推,直到$nj
数字。因此,所有这些文件都会转储到一个文件中feats.scp
。
现在,如果你手动获取所有这些文件并将它们feats.scp
逐个粘贴进去,那么当然 - 那是相同的。如果你只粘贴一个文件,feats.scp
那就不一样了。
这里还有一个小问题cat $mfccdir/raw_mfcc_$name.$n.scp || exit 1;
。如果$nj
数字是 5 ,文件编号为 1、2、3、5(缺少 4),脚本将在 4 处退出,并且不会在输出中包含 5。目前尚不清楚这是否是故意的,但我建议您对其进行编辑,至少使用continue
语句代替,exit
并仍将其他内容传递到feats.scp