Как объединить два файла в цикле?

У меня есть два файла, которые я хочу объединить в один новый файл, но я хочу сделать это с помощью цикла, потому что у меня есть разные каталоги (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 файл, точно такой же, как мой второй входной файл, поэтому мой кот работает неправильно. В чем здесь проблема?

0
21.02.2017, 10:28
2 ответа

Проблема в том, что каждый раз, когда выполняется 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 соответствует только одному имени файла.

1
28.01.2020, 02:46

Другое решение без cd :

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

Теги

Похожие вопросы