Объединение двух файлов в разных папках в Linux - PullRequest
6 голосов
/ 23 июня 2011

У меня есть два набора папок, в которых есть файлы с одинаковыми именами файлов и структурой . Структура папок выглядит примерно так:

\outputfolder\
 |---\folder1\
 |      |---file1.txt
 |      |---file2.txt
 |
 |---\folder2\
        |---file1.txt
        |---file2.txt

Итак, мне нужно объединить (добавить) все файлы с одинаковыми именами в этих папках (file1.txt с file1.txt и т. Д.) В другой файл внутри выходной папки. После получения этих объединенных файлов мне также нужно создать файл tar.gz из всех этих объединенных файлов.

Как я могу сделать это в среде командной строки на основе Linux? Имя папки (folder1 и folder2 и т. Д.) Является переменным, поэтому его нужно указывать, но не нужно указывать файлы, и оно должно автоматически объединять все файлы с одинаковыми именами.

Кроме того, в этих файлах есть заголовки для имен столбцов, поэтому мне нужно будет удалить их и при добавлении.

Ответы [ 4 ]

4 голосов
/ 23 июня 2011

Вот код, с которого можно начать

topdir=outputfolder
dir1=folder1
dir2=folder2

for f in $topdir/$dir1/*.txt
do
    outf=$topdir/`basename $f .txt`-concat.txt
    cp $f $outf
    sed -e '1 d' $topdir/$dir2/`basename $f` >> $outf
done

tar czf foo.tar.gz $topdir/*-concat.txt

Редактировать: добавлена ​​часть, удаляющая заголовок 2-го файла.

2 голосов
/ 23 июня 2011
find . -name 'file1.txt' | xargs cat >file1_concat.txt
1 голос
/ 23 июня 2011

Это будет работать, даже если некоторые файлы находятся только в папке 1, а некоторые файлы только в папке 2:

concat_files() {
  for dir in "$@"; do
    for file in "$dir"/*; do 
      this=$(basename "$file")
      { [[ -f "$this" ]] && sed 1d "$file" || cat "$file"; } >> "$this"
    done
  done
  tar zcvf allfiles.tar.gz *
}

concat_files folder1 folder2

Это будет работать, если у вас есть более 2 папок для вашей работы конкатенации.

Полагаю, вы хотите сохранить заголовок в результирующем файле.

0 голосов
/ 23 июня 2011

Вы пробовали команду cat (объединение)?

cat file1 file2 >> outputfile

Возможно, вы захотите добавить это в небольшой скрипт bash, чтобы пройти по каталогу.Это должно начать вас.

Удачи.Leo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...