最初の行の最初の列と最後の列の値が同じ最後の行の2番目の列を印刷します。 [閉じる]

最初の行の最初の列と最後の列の値が同じ最後の行の2番目の列を印刷します。 [閉じる]

ここで望むのは、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つの値を維持したいと思います。

  1. 最初の行 最初の列

  2. 最後の行の2番目の列

  3. 共通の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ブロックが必要です。

おすすめ記事