Вырезать строки из файла

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
alienrom
Сообщения: 142
ОС: GNU/Linux, BSD

Вырезать строки из файла

Сообщение alienrom »

Доброго всем времени.
Возникла тут задача, решить которую не могу уже целый час
Нужно из одного файла строки с четвёртой с начала и до четвёртой с конца вставить в другой файл в туже позицию, заменив существующие.
Например. есть 2 файла: file1 и file2

Код: Выделить всё

file1:                            file2:
строка1                                string1
строка2                                string2
строка3                                string3
строка4                                string4
строка5                                string5
строка6                                string6
строка7                                string7
строка8                               string8
строка9                               string9


После манипуляций, второй файл должен принять вид:

Код: Выделить всё

string1
string2
string3
строка4
строка5
строка6
string7
string8
string9


Вертел-крутил седом. Но так и не дошел до решения. Как поступить?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Вырезать строки из файла

Сообщение SLEDopit »

Код: Выделить всё

{ head -n 3 file2 ; sed '1,3d' file1 | head -n -3 ; tail -n 3 file2 ; } > new_file
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21257
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Вырезать строки из файла

Сообщение Bizdelnick »

SLEDopit писал(а):
01.11.2012 14:47

Код: Выделить всё

{ head -n 3 file2 ; sed '1,3d' file1 | head -n -3 ; tail -n 3 file2 ; } > new_file

Тогда уж вообще без sed:

Код: Выделить всё

{ head -n 3 file2 ; tail -n +4 file1 | head -n -3 ; tail -n 3 file2 ; } > new_file
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Вырезать строки из файла

Сообщение drBatty »

alienrom писал(а):
01.11.2012 14:23
Нужно из одного файла строки с четвёртой с начала и до четвёртой с конца вставить в другой файл в туже позицию, заменив существующие.

понятие "четвёртая с конца" в sed не имеет смысла.
можно узнать её как

Код: Выделить всё

$ N=`sed -n $= 1`
((N -= 3))

Это длинна файла 1 минус 3.

Потом можно слить два файла

$

$ paste 1 2 11 21 12 22 13 23 14 24 15 25 16 26 17 27 18 28 19 29 $ sed 'R2' 1 11 21 12 22 13 23 14 24 15 25 16 26 17 27 18 28 19 29


ну и наконец сделать требуемое

Shell

$ sed 'R2' 1 | sed 'N;8,12s/\n.*//;t;s/.*\n// 21 22 23 14 15 16 27 28 29


8 это 4*2, а 12 это (9-(4-1))*2, где 9 это размер файла.

ЗЫЖ магия быть может, но работает...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Вырезать строки из файла

Сообщение SLEDopit »

drBatty писал(а):
05.11.2012 23:50
понятие "четвёртая с конца" в sed не имеет смысла.
Тем не менее, даже это можно вычислить в автоматическом режиме, при желании. Хотя sed не очень подходит для этой задачи.
drBatty писал(а):
05.11.2012 23:50
ЗЫЖ магия быть может, но работает...
Да какая уж тут магия. Всё просто и понятно (:
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
alienrom
Сообщения: 142
ОС: GNU/Linux, BSD

Re: Вырезать строки из файла

Сообщение alienrom »

О.. всем спасибо за советы.)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Вырезать строки из файла

Сообщение drBatty »

SLEDopit писал(а):
05.11.2012 23:59
Тем не менее, даже это можно вычислить в автоматическом режиме, при желании. Хотя sed не очень подходит для этой задачи.

угу.

Код: Выделить всё

sed -rn 'H;${g;s/.*\n([^\n]+)(\n[^\n]*){3}$/\1/p}'

вот только tail читает файл с конца, а sed с начала. Потому sed будет читать ВЕСЬ файл.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: