如何剪切以空格分隔的列的数据文件

如何剪切以空格分隔的列的数据文件

我有一个包含两列的数据文件

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 中获取数据,并将行放入fnewfnew1...

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由正则表达式模式分隔的多个部分,/^$/重复次数尽可能多{*}

默认情况下,输出文件将被命名为等xx00xx01但您可以更改前缀和后缀格式,如 中所述man csplit,例如

csplit -f 'new' -b '_%d' file '/^$/' '{*}'

对于形式为 的名称new_0new_1等等。

(对于固定长度的片段,您可以考虑使用纯文本split而不是基于正则表达式的csplit)。

答案4

或者像这样,数据是有两列的文件;第一行和第二行由空格分隔。

将第一行保存到文件 1st:

awk -F " " '{print $1}' data > 1st

将第二行保存至文件 2nd:

awk -F " " '{print $2}' data > 2nd

相关内容