代码之家  ›  专栏  ›  技术社区  ›  yukondude

如何在bash中将文件大小相加,按日期将结果分组?

  •  13
  • yukondude  · 技术社区  · 16 年前

    27659   2009-03-09  17:24  APP14452.log
    0       2009-03-09  17:24  vim14436.log
    20      2009-03-09  17:24  jgU14406.log
    15078   2009-03-10  08:06  ySh14450.log
    20      2009-03-10  08:06  VhJ14404.log
    9044    2009-03-10  15:14  EqQ14296.log
    8877    2009-03-10  19:38  Ugp14294.log
    8898    2009-03-11  18:21  yzJ14292.log
    55629   2009-03-11  18:30  ZjX14448.log
    20      2009-03-11  18:31  GwI14402.log
    25955   2009-03-12  19:19  lRx14290.log
    14989   2009-03-12  19:25  oFw14446.log
    20      2009-03-12  19:28  clg14400.log
    

    (请注意,有时文件大小可以为零。)

    27679 2009-03-09
    33019 2009-03-10
    64527 2009-03-11
    40964 2009-03-12
    

    结果将显示随时间推移的活动趋势,并突出显示异常繁忙的日子。

    SELECT SUM(filesize), filedate
    FROM files
    GROUP BY filedate;
    

    6 回复  |  直到 16 年前
        1
  •  17
  •   ashawley    16 年前

    awk '{sum[$2]+= $1;}END{for (date in sum){print sum[date], date;}}'
    
        2
  •  10
  •   Kristjan Adojaan    12 年前

    仅递归按日期排序和求和的文件

    find ./ -type f -printf '%TY-%Tm-%Td %s\n'|awk '{sum[$1]+= $2;}END{for (date in sum){print date, sum[date];}}'|sort
    

    仅限当前目录中的文件,按日期排序并求和

    find ./ -maxdepth 1 -type f -printf '%TY-%Tm-%Td %s\n'|awk '{sum[$1]+= $2;}END{for (date in sum){print date, sum[date];}}'|sort
    
        3
  •  8
  •   dobrokot    15 年前

        4
  •  3
  •   yukondude    16 年前

    ls -l --time-style=long-iso *log |
        awk '{sum[$6]+= $5;}END{for (s in sum){print sum[s], s;}}' |
        sort -k2 |
        column -t
    
        5
  •  1
  •   Dimitre Radoulov    16 年前

    ls -l --time-style=long-iso * | 
      WHINY_USERS=-9 awk 'END {
        for (s in sum)
          printf "%-15s\t%s\n", sum[s], s
          }
      { sum[$6]+= $5 }
      '
    
        6
  •  0
  •   Harel Ben Attia    12 年前

    我创建了一个工具,可以对文本数据执行类似SQL的查询,包括分组、连接、条件和其他内容。你可以看看 here 了解详情。