次の 2 つの 1 行の 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
ステートメントを使用して 2 番目を 1 番目に追加しようとしました。これがぐちゃぐちゃになりました。pae
また、スクリプトでコマンドラインの機能を実現する方法もわかりません。スクリプトで が必要かどうかはわかりませんe
が、最初に各行を出力してから配列に分割する ( with 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
ここで不要な場合は、モジュールを使用しないことにもオープンです。あなたが提供できる助け/説明をありがとう!