0

私はこのようにフォーマットされたファイルを持っています:

1 223614 225119.537745 Engine45
2 223614 225121.082392 Engine45
3 223614 225124.440309 Engine45
4 223614 225124.763890 Engine45
5 223621 225124.933927 Engine46
6 223614 225124.934205 Engine45
7 223614 225125.354857 Engine45
8 223614 225127.603434 Engine45
.
.
.

私はそれを取る awk/shell を作成しようとしています 1) 同じ行に等しい場合は列 2 と 4 を検証し、これが当てはまる場合は、2) 列 2 で 2 番目に見つかった値を最初に見つかった列 1 で減算します。次のようになります。

1) で見つかった最初の行:

1 223614 225119.537745 Engine45

1) で見つかった 2 行目:

2 223614 225121.082392 Engine45

出力はこれの答えでなければなりません:

225121.082392 - 225119.537745 = 1.544647

次の出力は次のようになります。

3行目は1)で検索:

3 223614 225124.440309 Engine45

4 行目 1) で検索:

4 223614 225124.763890 Engine45

出力: 225124.763890 - 225124.440309 = 0.323581

そして、提供されたファイル内のすべてのレコードを連続して使用します。

私は1)それを機能させることができたが、2)私にとって本当に難しくなっていると信じていますが、誰かがリードを与えることができれば、非常に役立つ可能性があります。 perl のような別のツールで完了します。

よろしく

4

2 に答える 2

0

値が等しくない場合の対処方法を指定していません。2 行をスキップしますか? それとも、そのうちの 1 つだけで一致を検索しますか?

以下は、両方の行をスキップする Perl ソリューションです。

perl -e '
    while (1) {
        @first =  split " ", <>;
        @second = split " ", <>;
        print $second[2] - $first[2], "\n" if $first[1] == $second[1] and $first[3] == $second[3];
        last if eof;
    }' input-file
于 2014-05-18T05:15:06.443 に答える