Объединение большого количества файлов в один файл с помощью терминала - PullRequest
1 голос
/ 25 июня 2019

У меня есть 600 файлов, которые я хочу объединить / объединить в один.Я сделал это с помощью следующей команды на терминале Mac:

  cat neutral_*.msOut.gz > neutral.msOut

Каждый файл имеет следующий формат:

 // Initial random seed:
 1824618124544

 // RunInitializeCallbacks():
 initializeMutationRate(0);
 initializeMutationType(1, 0.5, "f", 0);
 initializeGenomicElementType(1, m1, 1);
 initializeGenomicElement(g1, 0, 1099999);
 initializeRecombinationRate(1e-08);

 // Starting run at generation <start>:
 1 

 #WARNING (Subpopulation::ExecuteMethod_outputXSample): outputMSSample() should probably not be called from an early() event in a WF model; the output will reflect state at the beginning of the generation, not the end.
 #OUT: 1 SM p3 208

 //
 segs: 3
 positions: 0.0012,0.19383,0.18383
 001
 110
 111

При объединении этих файлов я хочу включить только 15 лучшихстроки (одинаковые в каждом файле) один раз в конечном объединенном файле.Как этого добиться с помощью терминала Mac?

Ответы [ 3 ]

4 голосов
/ 25 июня 2019

сначала вам нужно распаковать архив, чтобы удалить 15 первых строк

for i in neutral_*.msOut.gz
do
  zcat $i | head -15 $i > neutral.msOut
  break
done

for i in neutral_*.msOut.gz
do
  zcat $i | sed -e 1,15d >> neutral.msOut
done
  • первый цикл просто извлекает один раз первые 15 строк в одном файле, чтобы получить их один раз в файле результатовцикл можно упростить, зная имя одного из файлов, чтобы просто извлечь его первые 15 строк.Если вы не хотите иметь этот заголовок в созданном файле, просто удалите этот цикл
  • , второй цикл добавляет все, кроме первых 15 строк каждого файла
  • , для которых не требуется заданныйверсия tail (см. замечание в удаленном ответе @kabanus о том, что tail не имеет опции -q в osx )
  • может быть, вам нужно выполнить zip neutral.msOut после двух петель
2 голосов
/ 25 июня 2019

Используйте sed:

sed -e '1,15d' neutral_*.msOut.gz > neutral.msOut

Но из ваших комментариев кажется, что вы также хотите разархивировать файл.Если так:

for i in neutral_*.msOut.gz; do gzip -dc "$i" | sed -e 1,15d; done > neutral.msOut
0 голосов
/ 25 июня 2019

Из вашего вопроса я понимаю, что:

  1. У вас есть сжатые текстовые файлы 600 gzip с нейтральным _ *. MsOut.gz шаблоном в вашем MACOS directory.
  2. Вы хотите создать один несжатый текстовый файл: нейтральный.msOut , который объединяет текстовые строки всех 600 файлов выше, исключая первые 15 строк каждогоиз этих текстовых файлов.

Если выше указано значение true, выполните следующие 3 шага в Терминале вашего Mac:

  1. CD в каталог, в котором вы храните 600нейтральные _ *. msOut.gz файлы в.
  2. Выполнение: gunzip neutral_*.msOut.gz # для распаковки 600 файлов.
  3. Выполнение: tail -q -n '+16' neutral_*.msOut > neutral.msOut # для создания текстового файла результата.

Объясненные опции, используемые в хвосте:

  1. -q - предотвращает добавление к каждому фрагменту файла информации о файле
  2. -n '+16' - выборхвостовая часть, начинающаяся с строки текста 16
...