如何使用Perl将巨大的文本文件分成不同的行(每行32个字符)?

时间:2016-03-14 21:18:24

标签: perl

例如文本文件可以是:

473e004095bc0058703e00b0dc3d00805f3e00984c3e00d0053e0028703e00800d3c0008553e00b0e6bd00b0de3d00c050be00008bbc005075be00900abe009844be00f85bbe00a0d0bd00a870be0040c13c00e03fbe00a00e3e0010adbd00d8603e0060153d00b86a3e00b01f3e00f0343e00106c3e00609c3d0018733e000067bd0008303e004029be00c0883d00686bbe00108bbd00506ebe001834be00302abe00c868be00a046bd00e864be0070a03d00881fbe00483e3e00a00bbd0040753e0070bd3d0050663e00b8453e0058113e00f06d3e0080803c0040573e00b0d7bd0080063e007845be0080253c00c06cbe00a0f3bd005059be005056be00d0e8bd006072be0000f13b00d047be0058023e0020d4bd00585c3e0000e83c0070723e0080173e00a8463e00a0603e0010b63d00486c3e00e039bd00a0313e00f81dbe00f0963d00d864be006043bd00c861be00e02abe00302bbe008864be00e06fbd009066be0020903d004819be00a0303e008034bd00d86f3e0030b93d0000683e0058383e00d0193e0018733e0040d03c0070633e0060bebd00a8113e002846be0040ae3c00886fbe0060e7bd00d05dbe00e04ebe00a801be00b86ebe0000f9bb00e053be0020f63d0020e9bd00185b3e0000443c00d0713e00480a3e0080453e0090573e00c0d13d00a0743e0040b5bc0 0083f3e00a018be0070a93d00185dbe00c033bd005869be00401abe004836be00d863be00f09ebd005870be00606a3d00282abe00a8273e00a06fbd00e8683e0040933d00286b3e00303e3e00701b3e00406e3e00c0283d00605e3e00e0b4bd00500d3e00783cbe00c0df3c00c06abe0090d2bd008061be00784abe00600bbe006875be000004bc00e04fbe0070f53d0020f1bd00c0513e0000f03b00b0713e0068083e0050483e0010593e0020cf3d00d0743e00009abc0040473e00a812be0070b83d00f05dbe002013bd002072be00c81cbe00483cbe00b06abe00d094bd00a86fbe00e0413d00a030be0020223e006079bd00186f3e0040933d00f0663e0098263e0058263e00206e3e0020663d0030603e0090b0bd0068193e002037be0000e33c00d86bbe00c0c9bd002861be005046be002814be002070be0080aabc

我想将每32个字符分成一行,这就像:

52494646783a150057415645656d7420

bd002861be005046be002814be002070

dbe002013bd002072be00c81cbe00483

如何在Perl中完成?

2 个答案:

答案 0 :(得分:2)

只要您的文件只包含一行长文本,这应该适合您

perl -E 'say $chunk while read STDIN, $chunk, 32' < myfile.txt

输出

473e004095bc0058703e00b0dc3d0080
5f3e00984c3e00d0053e0028703e0080
0d3c0008553e00b0e6bd00b0de3d00c0
50be00008bbc005075be00900abe0098
44be00f85bbe00a0d0bd00a870be0040
c13c00e03fbe00a00e3e0010adbd00d8
603e0060153d00b86a3e00b01f3e00f0
343e00106c3e00609c3d0018733e0000
67bd0008303e004029be00c0883d0068
6bbe00108bbd00506ebe001834be0030
2abe00c868be00a046bd00e864be0070
a03d00881fbe00483e3e00a00bbd0040
753e0070bd3d0050663e00b8453e0058
113e00f06d3e0080803c0040573e00b0
d7bd0080063e007845be0080253c00c0
6cbe00a0f3bd005059be005056be00d0
e8bd006072be0000f13b00d047be0058
023e0020d4bd00585c3e0000e83c0070
723e0080173e00a8463e00a0603e0010
b63d00486c3e00e039bd00a0313e00f8
1dbe00f0963d00d864be006043bd00c8
61be00e02abe00302bbe008864be00e0
6fbd009066be0020903d004819be00a0
303e008034bd00d86f3e0030b93d0000
683e0058383e00d0193e0018733e0040
d03c0070633e0060bebd00a8113e0028
46be0040ae3c00886fbe0060e7bd00d0
5dbe00e04ebe00a801be00b86ebe0000
f9bb00e053be0020f63d0020e9bd0018
5b3e0000443c00d0713e00480a3e0080
453e0090573e00c0d13d00a0743e0040
b5bc00083f3e00a018be0070a93d0018
5dbe00c033bd005869be00401abe0048
36be00d863be00f09ebd005870be0060
6a3d00282abe00a8273e00a06fbd00e8
683e0040933d00286b3e00303e3e0070
1b3e00406e3e00c0283d00605e3e00e0
b4bd00500d3e00783cbe00c0df3c00c0
6abe0090d2bd008061be00784abe0060
0bbe006875be000004bc00e04fbe0070
f53d0020f1bd00c0513e0000f03b00b0
713e0068083e0050483e0010593e0020
cf3d00d0743e00009abc0040473e00a8
12be0070b83d00f05dbe002013bd0020
72be00c81cbe00483cbe00b06abe00d0
94bd00a86fbe00e0413d00a030be0020
223e006079bd00186f3e0040933d00f0
663e0098263e0058263e00206e3e0020
663d0030603e0090b0bd0068193e0020
37be0000e33c00d86bbe00c0c9bd0028
61be005046be002814be002070be0080
aabc

答案 1 :(得分:2)

您可以将$/变量设置为数字引用以设置输入缓冲区大小:

perl -lpe 'BEGIN { $/ = \32 }' input > output
  • -p将打印从输入中读取的每个缓冲区;
  • -l将为打印添加换行符。