我有一个记录长度为n的UNIX数据集(这将是可更改的,但总是可以被2769精确整除)。
我想处理这个文件最终得到一个新的数据集,其中包含长度为2769的单独记录,需要在UNIX中完成(perl?,sed?,awk?或其他)。
我可以使用循环在shell脚本中执行此操作,但所需的时间过长。
我尝试'拆分',但似乎您可以指定的长度有限制。
有人可以提出有效的答案吗?
谢谢,
伯尼
答案 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
开始