如何通过数字范围过滤行?

如何通过数字范围过滤行?

该文件只有一列:

fs://derps123/20210103/
fs://derps123/20210104/
fs://derps123/20210105/
fs://derps123/20210106/
fs://derps123/20210107/
fs://derps123/20210108/
fs://derps123/20210109/

我想过滤20210105和之间的行20210108

我尝试使用 awk 进行过滤,date但这会引发语法错误:

awk -v date='gs://derps123/''$1!=date{next};/20210105/,/20210108/' folders.txt

答案1

-v您会收到语法错误,因为选项值和 awk 程序之间没有空格 。

您可以将日期视为数字,如下所示:

$ awk -v low=20210105 -v high=20210108 -v FS='/' '$4 >= low && $4 <= high' folders.txt
fs://derps123/20210105/
fs://derps123/20210106/
fs://derps123/20210107/
fs://derps123/20210108/

答案2

你可以用 sed 来做到这一点:

sed -n '/20210105/,/20210108/p' folders.txt

答案3

awk你根本不需要。grep就足够了:

grep '2021010[5-8]' you_data

即使文件未按日期排序,此操作也有效。

但是,如果您想使用awk

awk -F/ -v r=2021010[5-8] '$(NF-1) ~ r' your_data

答案4

 awk -F "/" '$(NF-1)>=20210105 && $(NF-1)<=20210108'  filename

fs://derps123/20210105/
fs://derps123/20210106/
fs://derps123/20210107/
fs://derps123/20210108/

相关内容