【发布时间】:2013-03-11 16:29:30
【问题描述】:
我正在尝试将以下两个单行 perl 代码组合成一个 perl 脚本,该脚本在文件的一行上执行,然后再进入下一行。请注意,这不是我自己的原始代码,这里提供的非常周到:Adding a blank line between unrelated data entries
1
perl -pae 'print $/ if (defined $x && $x ne $F[0]); $x = $F[0];' DF-data2pfa.csv >DF-data2pfb.txt
2
perl -pae 'print $/ if (defined $x && $x ne $F[3]); $x = $F[3];' DF-data2pfb.txt >DF-data2pfc.txt
该脚本完全符合我的要求(将我的数据集中一行的 F[0] 字段与前一行的 F[0] 进行比较,如果它们不同,则在这些条目之间添加一个空白行),除了我意识到我需要它在一行上查看 F[0] 和 F[3] 并将两者与前一行进行比较。令我尴尬的是,我尝试一个接一个地运行,并没有意识到每次脚本遇到前一个脚本添加的空行时都会添加一个额外的空行,这对于我正在尝试输入的程序来说是不可接受的数据到。
所以我尝试使用Deparse 工具将两者都转换为脚本格式,然后使用elsif 语句将第二个添加到第一个。这变得一团糟。另外我不确定如何在脚本中实现命令行的pae功能。我不确定脚本中是否需要e,但似乎首先打印每一行然后将其拆分为一个数组(使用pa)是整个代码的一个相当完整的组件,我不确定如何在这里实现。
这是我得到的:
while (defined($_ = <ARGV>)) {
our(@F) = split(' ', $_, 0);
$x = $F[0];
$y = $F[3];
if defined $x and $x ne $F[0];
elsif defined $y and $y ne $F[3];
print $/
}
continue {
die "-p destination: $!\n" unless print $_;
}
如果这里没有必要,我也愿意不使用deparse 模块。感谢您提供的任何帮助/解释!
【问题讨论】:
标签: perl if-statement