linux + iptables + / etc / sysconfig / iptables

Один из способов сделать это, предполагая GNU stat(1) и GNU truncate(1):

#! /bin/sh

lines=1000000

size=$( wc -l "$1" | awk '{print $1}' )
tail=$(( size % lines ))
count=$(( size / lines ))

if [ $tail -ne 0 ]; then
    let count++
fi           

while [ $count -gt 0 ]; do
    start=$(( (count - 1) * lines + 1 ))
    fn=$( printf '%s_%05d' "$1" $count )
    sed -n $start,\$p <"$1" >"$fn"
    size_last=$( stat -c %s "$fn" )
    truncate -s -$size_last "$1"
    let count--
done

Без GNU coreutils то же самое можно сделать на Perl.

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

2
11.07.2016, 15:47
0 ответов

Теги

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