shell - 邮件帐户和松散文件夹使用 AWK 向 CSV 报告。如何从这个例子中实现这一点?
问题描述
我正在使用这个 shellscript为每个用户生成收件箱列表和所有文件夹的大小,如下所示:
john.doe@mydomain.com's max mailbox size = 0 MB, current mailbox size = 18,78 GB.
size (MB) msgcount unread folder
--------- --------- ---------- ----------------------------
0 0 0 /Chats
42 0 /Drafts
13118 28014 37 /Inbox
0 6 0 /Junk
0 1 0 /Orders
323 13385 17 /Raster
5772 3760 0 /Sent
1 183 0 /Payments
0 2 0 /Trash
-------------------------------------------------------
我需要从中挖掘数据并将其放入 CSV,在每行我将拥有电子邮件帐户以及 Trash、Sent 和 Junk 文件夹值的值。问题在于“收件箱”,因为如您所见,用户在树之外创建了文件夹(如“光栅”和“付款”)。所以我需要找到一种方法来总结这份报告中每个用户的所有不是“thrash/sent/junk”的东西。
解决方案
以下内容awk
可以作为起点。它收集数据,并将数据读入内存,并在 END 事件时打印摘要。
awk -v OFS=, '
function do_print () {
print user, s_trash, n_trash, s_sent, n_sent, s_junk, n_junk, s_other, n_other
}
/max mailbox/ { user = $1 ;
s_trash = n_trash = s_sent = n_sent = s_junk = n_junk = s_other = n_other = 0
next ;
}
# Parse lines starting with '/'
$4 ~ /^\/Trash/ { s_trash += $1 ; n_trash += $2 ; next }
$4 ~ /^\/Sent/ { s_sent += $1 ; n_sent += $2 ; next }
$4 ~ /^\/Junk/ { s_junk+= $1 ; n_junk += $2 ; next }
# Everything else goes to other
$4 ~ /^\// { s_other += $1 ; n_other = $2 ; next }
# Print whenever there is a line of '='
/==================/ { do_print() }
END { do_print() }
'
推荐阅读
- c# - 将压缩 xmldocument 转换为 zip 并获取为字节数组
- python - 为什么在 Windows 上写入现有文件如此容易因断电而丢失数据,即使在文件关闭后也是如此?
- sql - Snowflake - 查询最近 12 个月的数据
- javascript - 使用ajax的foreach循环中的模态迭代
- javascript - 带有 Jquery filter() 的 ES6 箭头符号?
- g++ - 避免库引起的g++ -Wuninitialized
- java - 为什么我不能使用实现 List 的类
列表 是期待? - c# - 计算列表中的重复项
并将它们保存在不同的文件中(或列表/数组/字符串) - python - Google App Engine Flex 是否支持 Pipfile?
- python - 如何解决与 BigQueryError 相关的问题 "reason": "invalid", "location": "test", "debugInfo": "", "message": "no such field."