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

Son*_*aro 0 bash awk

我想提取一个文件中的所有行,该文件在第4列中包含一个范围内的值(我必须多次执行,具有不同的范围).我正在尝试以下命令awk,但它不起作用:

awk '$4 ~ /[250898-251953]/ {print $0}' myfile.txt > myfile2.txt
Run Code Online (Sandbox Code Playgroud)

tri*_*eee 5

正则表达式字符类接受一系列字符,而不是数字.[1-35]匹配介于13(so,1or 23)之间的单个字符5.

你要:

awk '$4 >= 250898 && $4 <= 251953' myfile.txt >myfile2.txt
Run Code Online (Sandbox Code Playgroud)

{ print $0 } 是默认操作,因此您无需明确拼写.

顺便提一下,单个awk脚本可以一次处理多个范围.

awk '$4 >= 12 && $4 <= 34 { print >"range1" }
    $4 >= 56 && $4 <= 78 { print >"range2" }
    # etc etc' myfile.txt
Run Code Online (Sandbox Code Playgroud)

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