使用 awk 选择日期范围

问题描述 投票:0回答:2

我有名称格式为 YYYYMMDD 的文件夹列表,我正在尝试使用 awk 命令获取日期范围内的文件夹子集。但是,它不包括右侧边界上的文件夹名称。

目录列表:

bash-4.2# ls -d */
20240111/  20240112/  20240113/  20240114/  20240115/  20240118/  20240120/  dest/  test-files/  test/

注意: 该文件夹还可能包含名称不是 YYYYMMDD 格式的子文件夹。例如上面的“test-files/”

AWK 命令获取子文件夹名称的范围 (20240114 - 20240120):

bash-4.2#  ls -d */ | awk -v start=20240114 -v end=20240120 '{d=substr($0,0); if (d>=start&&d<=end) print}' 
20240114/
20240115/
20240118/

这里,虽然if条件有小于等于条件“d<=end" the output is not including folder with name "20240120/". Not sure why this one is not included in the result.

另外,请注意,我对高级 Linux 命令没有太多经验。因此,请告知上述命令是否正确并且始终有效。例如,如果存在任何具有意外名称的子文件夹,此命令是否有可能返回错误的结果。

linux bash shell awk
2个回答
1
投票

20240120/
20240120
之后进行整理,您的范围不包括它。这样做:

awk -F / -v start=20240114 -v end=20240120 '$1 >= start && $1 <= end'

1
投票

问题在于名称末尾的

/
20240120/
高于
20240120

您应该将其添加到

start
end
变量中。

ls -d */ | awk -v start=20240114/ -v end=20240120/ '{d=substr($0,0); if (d>=start&&d<=end) print}'
© www.soinside.com 2019 - 2024. All rights reserved.