txtファイル内の異なる列の2つの特定の値の間に行を取得する[閉じる]

txtファイル内の異なる列の2つの特定の値の間に行を取得する[閉じる]

次のように、多くの列を含むtxtファイルがあり、2番目の列位置と3番目の列位置の間に含まれる行を取得する必要があります。

1       10385389        10385390        .       21
1       10385390        10385391        .       22
1       10385391        10385392        .       22
1       10385392        10385393        .       21
1       10385393        10385394        .       22
1       10385394        10385395        .       25
1       10385395        10385396        .       25
1       10385396        10385397        .       25
1       10385397        10385398        .       25
1       10385398        10385399        .       25

たとえば、10385391から10385397までの出力を選択したとします。

1       10385391        10385392        .       22
1       10385392        10385393        .       21
1       10385393        10385394        .       22
1       10385394        10385395        .       25
1       10385395        10385396        .       25
1       10385396        10385397        .       25

ボーナス:同様に重要なのは、開始位置が見つからない場合は代わりに終了位置を見つけることです。提供された例では関連シリーズがあるため、これは発生しませんが、次のようなファイルを受け取った場合

1       10385389        10385390        .       21
1       10385391        10385392        .       22
1       10385392        10385393        .       21
1       10385393        10385394        .       22

私が避けたいエラーは、ユーザーが10385390と入力しましたが、2番目の列に見つからないことです。

ベストアンサー1

開始および停止条件はAWKで直接処理できます。

awk '$2 == "10385391",$3 == "10385397"'

これにより、2番目のフィールド「10385391」のある行で始まり、3番目のフィールドが「10385397」のある行で終わるすべての行が出力されます。

より柔軟な条件を処理するために、1 番目と 2 番目のフィールドの値が 10385391 から 10385397 の間の行を検討できます。

awk '$2 >= 10385391 && $3 <= 10385397'

入力に一致する行の複数のセットが含まれている場合は、すべて出力されます。

おすすめ記事