从 txt 文件中的不同列中获取两个特定值之间的行

-2 command-line awk text-processing columns

我有一个包含许多列的 txt 文件(如下所示),我需要获取包含在第二列位置到第三列位置之间的行。

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
Run Code Online (Sandbox Code Playgroud)

以这个例子为例,我想从 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

Run Code Online (Sandbox Code Playgroud)

奖励:同样重要的是,如果未找到起始位置,则采用收盘位置。在提供的示例中,这不会发生,因为有一个相关的系列,但万一我得到这样的文件

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

Run Code Online (Sandbox Code Playgroud)

我想避免错误是用户引入了 10385390 而这在第二列中没有找到。

Ste*_*itt 5

开始和停止条件可以直接在 AWK 中处理:

awk '$2 == "10385391",$3 == "10385397"'
Run Code Online (Sandbox Code Playgroud)

这将输出从第二个字段为“10385391”的行开始到第三个字段为“10385397”的行结束的所有行。

为了处理更灵活的条件,我们可以考虑您想要第一个和第二个字段的值在 10385391 和 10385397 之间的任何行:

awk '$2 >= 10385391 && $3 <= 10385397'
Run Code Online (Sandbox Code Playgroud)

如果输入包含多个符合条件的行,它们都将被输出。