我有一个包含以下几行的文件:
DELIMITER ;
我想为每个部分创建一个单独的文件。 split命令的手册页似乎没有这样的选项。
答案 0 :(得分:3)
split命令只将文件拆分为相同大小的块(可能除了最后一个) 但是,awk非常适合您的问题类型。这是一个解决方案示例。
1
2
3
DELIMITER ;
4
5
6
7
DELIMITER ;
8
9
10
11
split.awk
#!/usr/bin/awk -f
BEGIN {
n = 1;
outfile = n;
}
{
# FILENAME is undefined inside the BEGIN block
if (outfile == n) {
outfile = FILENAME n;
}
if ($0 ~ /DELIMITER ;/) {
n++;
outfile = FILENAME n;
} else {
print $0 >> outfile;
}
}
正如glenn jackman所指出的,代码也可以写成:
#!/usr/bin/awk -f
BEGIN {
n = 1;
}
$0 ~ /DELIMITER ;/ {
n++;
next;
}
{
print $0 >> FILENAME n;
}
如果您不经常使用脚本,则命令提示符awk -v x="DELIMITER ;" -v n=1 '$0 ~ x {n++; next} {print > FILENAME n}'
上的表示法更合适,但您也可以将其保存在文件中。
$ ls input*
input
$ chmod +x split.awk
$ ./split.awk input
$ ls input*
input input1 input2 input3
$ cat input1
1
2
3
$ cat input2
4
5
6
7
$ cat input3
8
9
10
11
脚本只是一个起点。您可能必须根据个人需求和环境进行调整。