如何在循环中连接两个文件?

如何在循环中连接两个文件?

我有两个文件想要连接到一个新文件中,但我想通过使用循环来完成此操作,因为我有不同的目录(a、b、c、g 和 z)以及相同的 2 个文件。我的循环是:

for i in a b c g z
do
    (cd $i/; for i in File_*_best3.txt *_new3.txt; do cat $i > combined.txt; done)
done

但我的结果是一个combined.txt与我的第二个输入文件完全相同的文件,所以我的猫无法正常工作。这里有什么问题呢?

答案1

问题是每次cat执行时,输出文件都会被截断(清空)。这是因为您用于>重定向。

选择:

for d in a b c g z
do
    (cd "$d"; rm -f combined.txt; for i in File_*_best3.txt *_new3.txt; do cat "$i" >>combined.txt; done)
done

或者

for d in a b c g z
do
    (cd "$d" && cat File_*_best3.txt *_new3.txt >combined.txt)
done

我假设File_*_best3.txt*_new3.txt只匹配一个文件名。

答案2

另一种解决方案没有cd

for d in a b c g z; do
    cat $d/{File_*_best3.txt,*_new3.txt} >$d/combined.txt
done

相关内容