gpt4 book ai didi

linux - 将文件分组并通过管道传输到 awk 命令

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:59:06 25 4
gpt4 key购买 nike

我在目录中有文件;它们使用 YYYY_MM_DD 命名:

-rw-r--r-- 1 root root 497186 Apr 21 13:17 2012_03_25
-rw-r--r-- 1 root root 490558 Apr 21 13:17 2012_03_26
-rw-r--r-- 1 root root 488797 Apr 21 13:17 2012_03_27
-rw-r--r-- 1 root root 316290 Apr 21 13:17 2012_03_28
-rw-r--r-- 1 root root 490081 Apr 21 13:17 2012_03_29
-rw-r--r-- 1 root root 486621 Apr 21 13:17 2012_03_30
-rw-r--r-- 1 root root 490904 Apr 21 13:17 2012_03_31
-rw-r--r-- 1 root root 491788 Apr 21 13:17 2012_04_01
-rw-r--r-- 1 root root 488630 Apr 21 13:17 2012_04_02

文件中的第一列是一个数字,我正在使用以下 awk 命令来计算第一列的平均值。

awk -F, '{ x += $1 } END { print x/NR }' MyFile

使用相同的命令,我可以将两个文件传递给 awk 以获得两个文件的总平均值。

awk -F, '{ x += $1 } END { print x/NR }' File1 File2

我想做的是这个...

我想获取目录中的所有文件,按月对它们进行分组,然后将当月的所有文件传递给 awk 命令。

所以根据相同的数据,3 月份有 7 个文件,我希望将所有 7 个文件都传递到我的 awk 命令,如下所示:

awk -F, '{ x += $1 } END { print x/NR }' File1 File2 File3 File4 File5 File6 File7

然后同样适用于 April 的套装。

最佳答案

您是想单独使用 awk 以某种方式完成此操作,还是可以使用文件 globbing?例如:

awk -F, '{ #Do stuff }' 2012_03_[0-3][0-9]

将获取所有 March 文件。

您也可以使用 2012_03*,但它的 globbing 模式不如上面的模式具体。

编辑

您可以使用这样的 shell 脚本:

DIR="/tmp/tmp"
for month in $(find "$DIR" -maxdepth 1 -type f | sed 's/.*\/\([0-9]\{4\}_[0-9]\{2\}\).*/\1/' | sort -u); do
awk -F, '#dostuff' "$DIR/${month}"_[0-3][0-9] > output/dir/SUM_"${month}"
done

与往常一样,有一些注意事项。带空格的文件会破坏它。如果目录中有不符合 YYYY_MM_DD 格式的文件,您将收到错误,但这不应该影响性能。如果这些限制 Not Acceptable ,请告诉我,我会再考虑一下。

关于linux - 将文件分组并通过管道传输到 awk 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10262237/

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