Linux文件拆分

时间:2011-08-09 16:58:44

标签: linux shell sed

我使用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- /,文件2以/ -sep开头 - /

我该如何处理?

请注意,在文件中我应该删除一个断行和/ -sep- /并在文件2上删除/ -sep- /和一个断行:S

3 个答案:

答案 0 :(得分:3)

反转它:告诉它打印的内容。

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 :(得分:3)

$ 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

答案 2 :(得分:1)

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