Linux расщепление файлов - PullRequest
       20

Linux расщепление файлов

1 голос
/ 09 августа 2011

Я использую sed, чтобы разделить файл на два

У меня есть файл с пользовательским разделителем "/ -sep- /", и я хочу разделить файл, где разделитель равен

в настоящее время у меня есть:

sed -n '1,/-sep-/ {p}' /export/data.temp > /export/data.sql.md5

sed -n '/-sep-/,$ {p}' /export/data.temp > /export/data.sql

, но файл 1 содержит / -sep- / в конце, а файл два начинается с / -sep - /

как я могу справиться с этим?

обратите внимание, что в файле 1 я должен удалить строку разрыва, а / -sep- / и в файле 2 удалить / -sep- / и строку разрыва: S

Ответы [ 3 ]

3 голосов
/ 09 августа 2011
$ cat >testfile
a
a
a
a
/-sep-/
b
b
b
b

, а затем

$ csplit testfile '/-sep-/' '//'
8
8
8
$ head -n 999 xx*
==> xx00 <==
a
a
a
a

==> xx01 <==
/-sep-/

==> xx02 <==
b
b
b
b
3 голосов
/ 09 августа 2011

Переверните его: скажите, что вместо не печатать.

sed '/-sep-/Q' /export/data.temp > /export/data.sql.md5
sed '1,/-sep-/d'/export/data.temp > /export/data.sql

(Что касается разрывной строки , я не понял этого. Пример вводавероятно, поможет.)

Кстати, ваш исходный код требует лишь незначительного дополнения, чтобы сделать то, что вы хотите:

sed -n '1,/-sep-/{/-sep-/!p}' /export/data.temp > /export/data.sql.md5
sed -n '/-sep-/,${/-sep-/!p}' /export/data.temp > /export/data.sql
1 голос
/ 09 августа 2011
sed -n '/-sep-/q; p' /export/data.temp > /export/data.sql.md5
sed -n '/-sep-/,$ {p}' /export/data.temp | sed '1d' > /export/data.sql 

Может быть проще сделать за один проход с awk:

awk -v out=/export/data.sql.md5 -v f2=/export/data.sql '
  /-sep-/ { out=f2; next}
  { print > out }
' /exourt/data.temp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...