我有两个文件想要连接到一个新文件中,但我想通过使用循环来完成此操作,因为我有不同的目录(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