将输入行转换为特定格式

时间:2014-09-24 04:29:59

标签: arrays regex perl hash

Hello Experts,

我输入文件中的条目如下所示。

    A3YZ.SX.6_A3YZ.SX.7
    AB3Y.OMG.1_AB3Y.OMG.2_AB3Y.OMG.3_AB3Y.OMG.4

在上面的示例中,使用下划线将多个规则组合成一行。显然,我的流程要求它们分成多个条目,其中第一列应该是行,第二列应该具有从每一行派生的模式。即

example1::
    A3YZ.SX.6_A3YZ.SX.7 A3YZ.SX.6
    A3YZ.SX.6_A3YZ.SX.7 A3YZ.SX.7

example2::

    AB3Y.OMG.1_AB3Y.OMG.2_AB3Y.OMG.3_AB3Y.OMG.4 AB3Y.OMG.1
    AB3Y.OMG.1_AB3Y.OMG.2_AB3Y.OMG.3_AB3Y.OMG.4 AB3Y.OMG.2
    AB3Y.OMG.1_AB3Y.OMG.2_AB3Y.OMG.3_AB3Y.OMG.4 AB3Y.OMG.3
    AB3Y.OMG.1_AB3Y.OMG.2_AB3Y.OMG.3_AB3Y.OMG.4 AB3Y.OMG.4

有办法吗?

此致 Divesh

2 个答案:

答案 0 :(得分:3)

从命令行使用perl

$ perl -F'_' -lane 'for my $ele ( @F ) { print "$_ $ele" }' file
A3YZ.SX.6_A3YZ.SX.7 A3YZ.SX.6
A3YZ.SX.6_A3YZ.SX.7 A3YZ.SX.7
AB3Y.OMG.1_AB3Y.OMG.2_AB3Y.OMG.3_AB3Y.OMG.4 AB3Y.OMG.1
AB3Y.OMG.1_AB3Y.OMG.2_AB3Y.OMG.3_AB3Y.OMG.4 AB3Y.OMG.2
AB3Y.OMG.1_AB3Y.OMG.2_AB3Y.OMG.3_AB3Y.OMG.4 AB3Y.OMG.3
AB3Y.OMG.1_AB3Y.OMG.2_AB3Y.OMG.3_AB3Y.OMG.4 AB3Y.OMG.4

说明:

<强>开关

  • -F'_':将输入字段分隔符设置为_
  • -l:在处理过程中压缩换行符并在打印过程中将其放回原处。
  • -a:根据字段分隔符自动分割输入行,并填充数组@F
  • -n:创建一个隐式while(<>) { ... }循环来处理每一行。
  • -e:执行后面的代码块。

<强>代码:

我们使用@F-F选项迭代我们创建的数组(-a)并打印整行以及数组元素。

答案 1 :(得分:0)

您只需使用拆分按_(?=\s|\w(?!\s))|\s拆分,然后将原始字符串附加到每个结果并获取输出。

参见演示。

http://regex101.com/r/lS5tT3/27