我有一个包含两列的数据文件
1.0000 9.9398383
1.4399 8.0000000
2.5688 7.9393838
1.0000 4.0000000
1.4399 9.0094949
2.5688 3.9932323
1.0000 8.9393993
1.4399 7.3838473
1.5688 2.8337738
我想创建一个不同的文件,用空白行分隔这些数据,但我不知道如何在空白行之后或之前剪切文件,请帮忙。
答案1
awk '/^$/{n++} ; {print $0 >> "fnew"n}' dfile
将从 dfile 中获取数据,并将行放入fnew
,fnew1
...
less dfile
1.0000 9.9398383
1.4399 8.0000000
2.5688 7.9393838
1.0000 4.0000000
1.4399 9.0094949
2.5688 3.9932323
1.0000 8.9393993
1.4399 7.3838473
1.5688 2.8337738
less fnew
1.0000 9.9398383
1.4399 8.0000000
2.5688 7.9393838
less fnew1
1.0000 4.0000000
1.4399 9.0094949
2.5688 3.9932323
答案2
perl -00 -lanE 'open my $fh, ">", "${ARGV}_$."; say $fh $_; close $fh' file
在哪里:
-00
使用空行作为记录分隔符-lanE
做一些事情(主要是循环输入中的记录)$ARGV
是当前文件名$.
是当前记录号$_
是当前记录
答案3
虽然我自己可能会使用 Awk 来完成这项任务,但另一个选择是csplit
:
csplit file '/^$/' '{*}'
将分成file
由正则表达式模式分隔的多个部分,/^$/
重复次数尽可能多{*}
默认情况下,输出文件将被命名为等xx00
,xx01
但您可以更改前缀和后缀格式,如 中所述man csplit
,例如
csplit -f 'new' -b '_%d' file '/^$/' '{*}'
对于形式为 的名称new_0
,new_1
等等。
(对于固定长度的片段,您可以考虑使用纯文本split
而不是基于正则表达式的csplit
)。
答案4
或者像这样,数据是有两列的文件;第一行和第二行由空格分隔。
将第一行保存到文件 1st:
awk -F " " '{print $1}' data > 1st
将第二行保存至文件 2nd:
awk -F " " '{print $2}' data > 2nd