【问题标题】:How does one add sequential numbers to the date numbers on for loop如何将序列号添加到 for 循环上的日期数字
【发布时间】:2015-01-31 09:14:34
【问题描述】:

例如,我在 linux shell bash 上有以下 FOR 循环。

for log in filename.log.2014-11-0[123456789].gz; do
    printf '%s:' "$log"
    gzcat "$log" | grep -wc 'burgers for 1 dollar'
done

我想让所有日期数据的数字循环如下:

for log in filename.log.201[45]-0[123456789]-0[123456789].gz; do
    printf '%s:' "$log"
    gzcat "$log" | grep -wc 'burgers for 1 dollar'
done

【问题讨论】:

  • 为什么不直接filename.log.201[45]-*-*.gz
  • 您真的只想要截至 9 月的月份以及那几个月中的个位数天数吗?或者你想要所有的月份和所有的日子?
  • 所有月份和所有日期@Barmar

标签: linux bash loops for-loop grep


【解决方案1】:

你可以在 BASH 中使用 range:

for log in filename.log.201{4,5}-0{1..9}-0{1..9}.gz; do
    printf '%s:' "$log"
    gzcat "$log" | grep -wc 'burgers for 1 dollar'
done

编辑:您可能只需要在 for 循环中使用这个 glob 模式:(感谢@Barmar)

filename.log.201{4,5}-*-*.gz

【讨论】:

  • 为什么所有的文字文件名都是引号?
  • 现在修复它,我有shopt -s nullglob,因此之前没有得到任何输出。
  • 请注意,如果缺少任何日期,这将从gzcat 收到错误[1-9] 而不是{1..9} 将与现有文件匹配。
  • 嗯,在这种情况下filename.log.201[45]-*-*.gz 会更好
  • 如果您只想要从 2014 年 11 月到 2015 年 2 月 1 日(含)的日期怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 2019-01-07
  • 1970-01-01
  • 2017-08-23
  • 2012-10-29
  • 2020-10-22
  • 2021-10-18
相关资源
最近更新 更多