ここで望むのは、3番目の行が共通に並んでいるすべての行を表示し、この行セットに基づいて出力を提供することです。 (このテーブルには一般的な3行目以外に他のプロパティがありますが、今は見ていません。)出力を見る前に、これらの行グループを見てみましょう。私たちが持っているなら
入力する:
0.016 0.032 1
0.032 0.048 1
0.048 0.064 1
0.064 0.08 1
0.08 0.096 1
0.096 0.112 1
0.112 0.128 0
0.128 0.144 0
0.144 0.16 0
0.16 0.176 0
0.176 0.192 0
0.192 0.208 0
これは、2つの行セットがあることを意味します。
共通の3番目の列値を持ち、1
0.016 0.032 1
0.032 0.048 1
0.048 0.064 1
0.064 0.08 1
0.08 0.096 1
0.096 0.112 1
2番目は共通の0
価値を持っています。
0.112 0.128 0
0.128 0.144 0
0.144 0.16 0
0.16 0.176 0
0.176 0.192 0
0.192 0.208 0
これらのそれぞれについて、3つの値を維持したいと思います。
最初の行 最初の列
最後の行の2番目の列
共通の3番目の列値
これは最終的に私たちに
希望の出力:
0.016 0.112 1
0.112 0.208 0
ベストアンサー1
Perlが救出に来る!
perl -ane '
sub out { print "@_\n" }
if ($F[2] != $three) {
out($one, $two, $three) if defined $one;
($one, $three) = @F[0, 2];
}
$two = $F[1];
END { out($one, $two, $three) }
' < input > output
-n
入力を1行ずつ読み、各行に対してコードを実行します。-a
各行をスペースの @F 配列に分割します。- 最初の行の出力をスキップします
if defined $one
(3番目の列は前の列とは異なりますが、まだ出力する項目はありません)。 - 最後のブロックを印刷するにはENDブロックが必要です。