gpt4 book ai didi

unix - 如何删除重复项并获取 unix shell 中特定列的 SUM?

转载 作者:行者123 更新时间:2023-12-01 09:49:18 25 4
gpt4 key购买 nike

我有一个文件有如下数据(文件数总是变化的)

May 1 09:00 ./archive/xxx_cs_app_gmas_reject_MDM_20180501090001.csv 0.000       2   ✔
May 1 17:45 ./archive/xxx_cs_app_gmas_reject_MDM_20180501174500.csv 0.055 185 ✈

我想要像下面这样的一行输出,但需要记录计数的总和(第 6 列),最好打印最新的文件(根据时间戳)

May 1 17:45 ./archive/xxx_cs_app_gmas_reject_MDM_20180501090001.csv 0.000       187   ✔

我尝试使用下面的 sed 命令,这样我就可以忽略文件的时间戳。但是你能帮我删除重复项以及计数总和吗(第 6 列)

sed -e 's/\(.*\)[0-9]\{6\}\.\([^.]*\)/\1.\2/'

最佳答案

Awk解决方案:

示例 input.txt:

May 1 09:00 ./archive/xxx_cs_app_gmas_reject_MDM_20180501090001.csv 0.000       2   ✔
May 1 17:45 ./archive/xxx_cs_app_gmas_reject_MDM_20180501174500.csv 0.055 185 ✈
May 1 19:45 ./archive/xxx_cs_app_gmas_reject_MDM_20180501194500.csv 0.055 3 ⤈
May 1 17:45 ./archive/aaa_cs_app_g_reject_MDM_20180502174500.txt 0.055 1 ✈
May 1 17:45 ./archive/aaa_cs_app_g_reject_MDM_20180502184500.txt 0.015 2 ✈

awk '{
curr_fn = $4;
sub(/[0-9]{14}/, "", $4)
}
fn {
if (fn == $4) { cnt += $6; $6 = cnt }
else { print rec; cnt = 0 }
}
{
fn = $4; $4 = curr_fn;
cnt = $6; rec = $0
}
END{ print rec }' input.txt
  • curr_fn - 当前文件名(由第 4 个字段 $4 给出)
  • sub(/[0-9]{14}/, "", $4) - 从文件名中删除 datetime 值以进行进一步的文件名比较
  • rec = $0 - 捕获整个当前记录

输出:

May 1 19:45 ./archive/xxx_cs_app_gmas_reject_MDM_20180501194500.csv 0.055 190 ⤈
May 1 17:45 ./archive/aaa_cs_app_g_reject_MDM_20180502184500.txt 0.015 3 ✈

关于unix - 如何删除重复项并获取 unix shell 中特定列的 SUM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50126664/

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