gpt4 book ai didi

bash - 如何根据行开头的日期过滤 bash 命令的输出行?

转载 作者:行者123 更新时间:2023-12-04 16:18:20 25 4
gpt4 key购买 nike

我收到以下几行作为某些 bash 管道的输出

output
20200604_tsv
20200605_tsv
20200606_tsv
20200706_tsv

我的变量中有一个 YYYYMMDD 格式的日期变量

filter_date="20200605"

我想在输出行上应用日期操作,即仅选择行的第一部分(“_”之前)小于等于filter_date的行。

即预期输出

20200604_tsv
20200605_tsv

如何在 bash 管道中实现这种过滤?

我尝试过以下操作(按字典顺序匹配字符串),但无法过滤并获取原始名称。

BASH_CMD_THAT_OUTPUT_LINES | sort | awk '{name = ($1); print name <= "20200605*"}'

## Answer
1
0
0
0

最佳答案

Awk 能够通过去除多余的内容来非常轻松地将字符串转换为数字。例如。如果向字符串 123_foo 添加 0,则该字符串将转换为 123。因此以下操作将执行您的请求:

command | awk '($0+0 < 20200605)'

如果您有像 YYYYMMDD 这样的可排序日期格式,则此方法非常有效。如果您有不同的格式,例如 YYYYDDMM,则必须首先转换格式来使用不同的技术。例如。

command | awk '{d=substr($0,1,4)substr($0,7,2)substr($0,5,2)}(d+0 < 20200605)'

请注意,在最后一个解决方案中,您必须反转最后一个数字中的月份和日期:即 20200605 是 YYYYMMDD 而不是 YYYYDDMM

关于bash - 如何根据行开头的日期过滤 bash 命令的输出行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62755484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com