【发布时间】:2011-12-04 06:38:48
【问题描述】:
我有一个文件x,带有部分分隔符:
The first section
#!
The second section
#!
The third section
我想将其拆分为一系列单独的文件,例如:
The first section
#!
The second section
#!
The third section
我认为csplit 将是解决方案,命令行类似于:
$ csplit -sk x '/#!/' {9999}
但第二个文件 (xx01) 最终包含两个分隔符:
#!
The second section
#!
关于如何以符合 POSIX 的方式完成我想要的任何想法? (是的,我可以接触 Perl/Python/Ruby 和朋友;但是,重点是扩展我的 shell 知识。)
我担心我在 OSX csplit 中发现了一个错误。人们可以试一试,让我知道结果吗?
#!/bin/sh
test -e
work="$(basename $0).$RANDOM"
mkdir $work
csplit -sk -f "$work/" - '/#/' '{9999}' <<EOF
First
#
Second
#
Third
EOF
if [ $(grep -c '#' $work/01) -eq 2 ]; then
echo FAIL Repeat
else
echo PASS Repeat
fi
rm $work/*
csplit -sk -f "$work/" - '/#/' '/#/' <<EOF
First
#
Second
#
Third
EOF
if [ $(grep -c '#' $work/01) -eq 2 ]; then
echo FAIL Exact
else
echo PASS Exact
fi
uname -a
当我在我的 Snow Leopard 盒子上运行它时,我得到:
$ ./csplit-test
csplit: #: no match
FAIL Repeat
PASS Exact
Darwin lani.bigpond 11.2.0 Darwin Kernel Version 11.2.0: Tue Aug 9 20:54:00 PDT 2011; root:xnu-1699.24.8~1/RELEASE_X86_64 x86_64
在我的 Debian 机器上,我得到:
$ sh ./csplit-test
csplit: `/#/': match not found on repetition 2
PASS Repeat
PASS Exact
【问题讨论】:
-
使用您的确切设置对此进行测试可以得到您正在寻找的结果。我正在使用
csplit (GNU coreutils) 8.5 -
那很糟糕。我正在使用 OSX csplit。