UNIX中的文件拆分

时间:2015-09-07 14:27:04

标签: perl unix awk sed

我有一个记录长度为n的UNIX数据集(这将是可更改的,但总是可以被2769精确整除)。

我想处理这个文件最终得到一个新的数据集,其中包含长度为2769的单独记录,需要在UNIX中完成(perl?,sed?,awk?或其他)。

我可以使用循环在shell脚本中执行此操作,但所需的时间过长。

我尝试'拆分',但似乎您可以指定的长度有限制。

有人可以提出有效的答案吗?

谢谢,

伯尼

4 个答案:

答案 0 :(得分:2)

您可以从命令行使用perl,

perl -Mautodie -ne 'BEGIN{$/ = \2769} print {open $f, ">", ++$i; $f} $_' file

答案 1 :(得分:1)

close将以魅力

处理此问题
split
行的大小为

$ split -l 2769 -d <(seq 1 30000) section $ wc -l sec* 2769 section00 2769 section01 2769 section02 2769 section03 2769 section04 2769 section05 2769 section06 2769 section07 2769 section08 2769 section09 2310 section10 30000 total ,数字后缀为-l,最后一个参数为输出文件前缀。您必须将-d替换为输入文件。

答案 2 :(得分:0)

我很惊讶AAAAA BBBBBCCCCC 无法做到这一点,但另一种选择是使用awk:

split

将输入文件的每一行打印到名称由输入文件组成的文件,后跟零填充的3位数字。这个数字每2769行增加1个。

如果有许多输出文件,对awk 'NR%2769==1{ close(outfile); outfile = sprintf("%s%03d", FILENAME, ++i) }{ print > outfile }' file (第一次调用时不会做任何事情)的调用很有用,否则它们将全部由awk保持打开状态。

答案 3 :(得分:0)

 IL_0001:  ldc.i4.0
  IL_0002:  stloc.0
  IL_0003:  br.s       IL_0014
  IL_0005:  ldstr      "test"     // loop start
  IL_000a:  callvirt   instance string [mscorlib]System.String::Trim()
  IL_000f:  pop
  IL_0010:  ldloc.0
  IL_0011:  ldc.i4.1
  IL_0012:  add
  IL_0013:  stloc.0
  IL_0014:  ldloc.0
  IL_0015:  ldc.i4     0xf4240
  IL_001a:  clt
  IL_001c:  stloc.3
  IL_001d:  ldloc.3
  IL_001e:  brtrue.s   IL_0005   // iterate

文件名称从 YourFile .1

开始