1

Я ищу инструмент или скрипт (Textwrangler или Terminal), который может разбивать больший текстовый файл каждые 100 строк, начиная со строки 5 (первые 4 строки заголовка), и выводить отдельные файлы .txt, которые содержат исходный заголовок.

Например

вход:

File.txt
line1 / line4   HEADER
...
line5 / line265 DATA

выход:

File_01.txt
line1/line4   HEADER
line5/line104 DATA

File_02.txt
line1/line4   HEADER
line5/line104 DATA

File_03.txt
line1/line4   HEADER
line5/line65  DATA

Текстовый файл использует разрывы строк Windows (CR LF) в случае, если это имеет значение.

В настоящее время я делаю это вручную, поэтому любые предложения, которые могут сделать этот процесс более эффективным, очень приветствуются.

2 ответа2

5
  1. Удалите заголовок и поместите его в отдельный файл header.txt .
  2. разделить данные, используя split --lines=100 data.txt (это создаст множество файлов со 100 строками в каждой с именем xaa xab xac и т. д.)
  3. Затем добавьте заголовок к каждому файлу for a in x??; do cat header.txt $a > $a.txt; done Это приводит к тому, что ваши готовые файлы данных (с заголовками) называются xaa.txt xab.txt xac.txt ...

Если объем данных настолько велик (или вы разбиваете на меньше строк), что xxx-файлов недостаточно, разделите четыре файла именованных файлов. В таком случае вставить дополнительный ? в for -statement выше.

Редактировать:
Для автоматизации извлечения заголовка используйте head -4 origdata.txt > header.txt чтобы извлечь первые четыре строки. Используйте tail -n +4 origdata.txt > data.txt чтобы извлечь все, кроме первых четырех строк. Теперь у вас есть два файла, один с заголовком и один с данными. Не должно быть слишком сложно объединить это со сценарием. (У меня нет доступа к Bash сегодня)

3

Основываясь на ответе, предоставленном Nifle, я создал скрипт, который выполняет предложенные им команды, добавляет исходное имя файла к выводу и очищает временные файлы.

#!/bin/bash

FILE=$(ls -1 | grep filename.txt)
NAME=${FILE%%.txt}

head -4 $FILE > header.txt
tail -n +5 $FILE > data.txt

split -l 100 data.txt

for a in x??
    do
        cat header.txt $a > $NAME.$a.txt
    done

mv $FILE $NAME.orig.txt
rm header.txt data.txt x??

И вуаля!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .