У меня есть два файла, которые я хочу объединить в один новый файл, но я хочу сделать это с помощью цикла, потому что у меня есть разные каталоги (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
Но мой результат - объединенный.txt
файл, точно такой же, как мой второй входной файл, поэтому мой кот работает неправильно. В чем здесь проблема?
Проблема в том, что каждый раз, когда выполняется 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
соответствует только одному имени файла.
Другое решение без cd
:
for d in a b c g z; do
cat $d/{File_*_best3.txt,*_new3.txt} >$d/combined.txt
done