当第4列的值在数字范围内时提取行

时间:2018-07-23 07:16:57

标签: bash awk

我想提取文件的所有行,这些文件的第4列中包含一个范围内的值(我必须做几次,使用不同的范围)。我正在尝试使用awk使用以下命令,但不起作用:

awk '$4 ~ /[250898-251953]/ {print $0}' myfile.txt > myfile2.txt

2 个答案:

答案 0 :(得分:5)

正则表达式字符类接受一系列字符,而不是数字。 [1-35]匹配13之间的单个字符(因此123)或5

您要

awk '$4 >= 250898 && $4 <= 251953' myfile.txt >myfile2.txt

{ print $0 }是默认操作,因此您无需明确将其拼写出来。

偶然地,单个awk脚本可以一次处理多个范围。

awk '$4 >= 12 && $4 <= 34 { print >"range1" }
    $4 >= 56 && $4 <= 78 { print >"range2" }
    # etc etc' myfile.txt

如果范围数大于操作系统允许您同时保持打开状态的文件句柄数,则此方法将崩溃。您可以编写更复杂的awk脚本,或者如果它是一次性任务,或者至少是一个罕见的任务,只需将任务分解为多个小的awk脚本,每个脚本处理大约20个范围(是您可以拥有的打开文件句柄数量的典型限制;但是请查阅本地操作系统文档以验证平台上的确切限制。

答案 1 :(得分:3)

awk '$4 >=250898 && $4 <= 251953{print $0}' file

awk '$4 >=250898 && $4 <= 251953' file

请注意,[0-9]表示0到9的数字,而[0-19]表示0到1以及9的数字。(不是19)