You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将grep统计结果转为日期+逗号分隔格式写入CSV?

解决方案

我来帮你搞定这个需求,咱们一步步拆解实现:

1. 先拿到前一天的日期

不同系统的日期命令有点差异,分两种情况处理:

  • Linux系统:用date -d指定“昨天”,同时按你要的格式输出:
    # 带前导零的格式(比如05/21/2018)
    yesterday=$(date -d "yesterday" +%m/%d/%Y)
    # 不带前导零的格式(比如5/21/2018)
    yesterday=$(date -d "yesterday" +%-m/%-d/%Y)
    
  • macOS系统:macOS的date用-v参数调整日期:
    # 带前导零
    yesterday=$(date -v -1d +%m/%d/%Y)
    # 不带前导零
    yesterday=$(date -v -1d +%-m/%-d/%Y)
    

2. 提取grep统计的数字并格式化

你的原命令输出是150 abc 130 def,我们需要把里面的数字提出来,用逗号连起来。用awk和paste就能轻松搞定:

counts=$(grep -EIho 'abc|def' * | sort | uniq -c | awk '{print $1}' | paste -sd ",")

简单解释下:

  • awk '{print $1}':把每一行的第一个字段(也就是统计的数字)单独拎出来
  • paste -sd ",":把所有数字用逗号拼接成150,130的格式

3. 拼接内容写入文件

把日期和统计结果拼成你要的格式,追加到counts.csv里:

echo "$yesterday $counts" >> counts.csv

完整可执行脚本

把上面的步骤整成脚本,直接运行就行:

Linux版本

#!/bin/bash
# 获取前一天日期(不带前导零)
yesterday=$(date -d "yesterday" +%-m/%-d/%Y)
# 统计并格式化数字
counts=$(grep -EIho 'abc|def' * | sort | uniq -c | awk '{print $1}' | paste -sd ",")
# 写入文件
echo "$yesterday $counts" >> counts.csv

macOS版本

#!/bin/bash
# 获取前一天日期(不带前导零)
yesterday=$(date -v -1d +%-m/%-d/%Y)
# 统计并格式化数字
counts=$(grep -EIho 'abc|def' * | sort | uniq -c | awk '{print $1}' | paste -sd ",")
# 写入文件
echo "$yesterday $counts" >> counts.csv

额外小提示

如果担心sort后的顺序不稳定(比如有时候def会排在abc前面),导致数字顺序搞反,那可以单独统计每个关键词,这样更稳妥:

count_abc=$(grep -EIho 'abc' * | wc -l)
count_def=$(grep -EIho 'def' * | wc -l)
counts="$count_abc,$count_def"

这样不管什么情况,abc的数量始终在前,def在后,完全符合你的格式要求。

内容的提问来源于stack exchange,提问作者Gha1d

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:22:59