Как я могу удалить первую строку текстового файла, используя скрипт bash / sed? - PullRequest
480 голосов
/ 04 декабря 2008

Мне нужно многократно удалять первую строку из огромного текстового файла, используя скрипт bash.

Сейчас я использую sed -i -e "1d" $FILE - но удаление занимает около минуты.

Есть ли более эффективный способ сделать это?

Ответы [ 15 ]

4 голосов
/ 04 марта 2009

Как насчет использования csplit?

man csplit
csplit -k file 1 '{1}'
3 голосов
/ 29 сентября 2016

должны показывать строки, кроме первой:

cat textfile.txt | tail -n +2
1 голос
/ 04 декабря 2008

Так как кажется, что я не могу ускорить удаление, я думаю, что хорошим подходом может быть обработка файла такими партиями, как это:

While file1 not empty
  file2 = head -n1000 file1
  process file2
  sed -i -e "1000d" file1
end

Недостатком этого является то, что если программа будет убита посередине (или если там будет какой-то плохой sql - вызывающий часть "процесса", которая умрет или заблокируется), будут строки, которые либо пропускаются, или обработано дважды.

(файл1 содержит строки кода SQL)

0 голосов
/ 14 ноября 2009

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

if [[ -f $tmpf ]] ; then
    rm -f $tmpf
fi
cat $srcf |
    while read line ; do
        # process line
        echo "$line" >> $tmpf
    done
0 голосов
/ 04 декабря 2008

Будет ли использовать хвост в N-1 строках и направлять его в файл, затем удалять старый файл и переименовывать новый файл в старое имя?

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

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