Я пытаюсь объединить следующие два однострочных Perl-кода в один Perl-скрипт, который выполняет оба в строке файла, прежде чем перейти к следующей строке. Обратите внимание, что это не мой собственный исходный код, он был очень продуманно представлен здесь: Добавление пустой строки между несвязанными записями данных
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
, если он здесь не нужен. Спасибо за любую помощь/объяснения, которые вы можете предоставить!