我想提取文件的所有行,这些文件的第4列中包含一个范围内的值(我必须做几次,使用不同的范围)。我正在尝试使用awk
使用以下命令,但不起作用:
awk '$4 ~ /[250898-251953]/ {print $0}' myfile.txt > myfile2.txt
答案 0 :(得分:5)
正则表达式字符类接受一系列字符,而不是数字。 [1-35]
匹配1
和3
之间的单个字符(因此1
或2
或3
)或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)