用perl缺少的行填充文件

时间:2016-09-28 15:22:20

标签: perl

我有一个包含以下内容的文件:

value1;1;1
value2;2;2
value3;5;5
value4;7;7
value5;1;8
value6;3;10
value7;7;14

第一列包含随机值,第二列包含1到7个有序,第三列只包含连续数字。 是否可以使用perl以下列方式填充此文件:

value1;1;1
value2;2;2
null;3;3
null;4;4
value3;5;5
null;6;6
value4;7;7
value5;1;8
null;2;9
value6;3;10
null;4;11
null;5;12
null;6;13
value7;7;14

谢谢!

2 个答案:

答案 0 :(得分:3)

这是一个简单的单行代码:

perl -ple '($m,$n)=/;(\d+);(\d+)$/; while ($l<$n) {print "null;",++$p,";$l" if $l; $l++} $l=$n+1; $p=$m' input

它使用变量($l)来记住最后一列的最后一个值,如果有间隙,则在输出每一行之前填充它们。

输出:

value1;1;1
value2;2;2
null;3;3
null;4;4
value3;5;5
null;6;6
value4;7;7
value5;1;8
null;2;9
value6;3;10
null;4;11
null;5;12
null;6;13
value7;7;14

答案 1 :(得分:0)

这是一个CSV文件,不是吗?所以,请尝试Text :: CSV_XS模块!解析器! metacpan

中到处都是解析器

您不需要在Perl中构建解析器几乎什么也不需要。真!