-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 而这在第二列中没有找到。
开始和停止条件可以直接在 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)
如果输入包含多个符合条件的行,它们都将被输出。