копирование разделов большого файла во множество выходных файлов

Есть несколько способов сделать это:

  • использовать стену для широковещательной рассылки сообщения вошедшим в систему пользователям. У этого есть недостаток, что он отправляется, даже если они редактируют файл. Вы можете запланировать это с помощью cron , например, эту запись в root crontab :

    * 0 * * * wall / etc / motd

  • , если они используют bash (и если вы контролируете их конфигурацию), приглашение bash может выполнять функции оболочки через PROMPT_COMMAND .

0
18.11.2018, 19:47
2 ответа

Вы не указываете связь между заголовками и строками. Но если отношение представляет собой постоянное количество строк, вы можете получить номера строк с помощью grep, а затем использовать sed для извлечения строк.

Например, чтобы получить все строки после подзаголовка:

#!/bin/bash 

file_in=/tmp/test.txt
file_out=/tmp/file1.txt
LINES=`grep -n Subheader $file_in | cut -f1 -d:`
for line in $LINES; do
  echo $line
  line1=$(($line+1))
  sed -n ${line1}p $file_in >> $file_out
done

Редактировать :вы можете запустить скрипт выше в цикле:

#!/bin/bash

n_max=100
file_in=/tmp/test.txt
file_out=/tmp/file

LINES=`grep -n Subheader $file_in | cut -f1 -d:`
for n in `seq 1 $n_max`; do
  echo "line $n"
  for line in $LINES; do
    line_n=$(($line+$n))
    sed -n ${line_n}p $file_in >> $file_out$n.txt
  done
done
exit 0
0
28.01.2020, 04:20

Мы можем сделать это следующим образом:

perl -Mautodie -lne '
   if ( /Subheader/... /Header/ ) {
      open FILE, q[>>], q[file]. ++$a if /Subheader/;
      close FILE if /Header/;
      print FILE if !/Subheader/ && !/Header/;
   }
' large_file.log

Это создаст мини-файлы -файл1, файл2 и т. д.

Perl открывает новый дескриптор файла, когда встречает строку подзаголовка. И он закрывает этот дескриптор файла, когда встречает строку заголовка. для всех остальных строк он выводит дескриптор файла.

0
28.01.2020, 04:20

Теги

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