AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-384357

macxpat's questions

Martin Hope
macxpat
Asked: 2022-03-03 19:50:40 +0800 CST

rtcwake 未作为根 cron 作业执行

  • 0

手动启动的这项rtcwake工作可以正常工作:

$ sudo rtcwake -m no -u -t $(date +%s -d 'tomorrow 07:30')

但似乎没有作为rootcron 作业运行:

$ sudo crontab -l
32 7 * * * rtcwake -m no -u -t $(date +%s -d 'tomorrow 07:30')

如果我用

$ sudo crontab -l
32 7 * * * rtcwake -m no -u -t $(date +%s -d 'tomorrow 07:30') &> /home/me/path/to/dir/crond.log

我得到一个空的日志文件。并且所有者crond.log是我,而不是root。(编辑1:情况并非如此,我的几个测试错误)。

这里的问题到底是什么?

编辑 2:感谢@αғsнιη 的回答,正确的 cronjob 如下(使用创建sudo crontab -e):

$ sudo crontab -l
32 7 * * * /usr/sbin/rtcwake -m no -u -t $(date +\%s -d 'tomorrow 07:30') &> /home/me/path/to/dir/crond.log
linux cron
  • 1 个回答
  • 153 Views
Martin Hope
macxpat
Asked: 2021-09-20 00:28:44 +0800 CST

awk:将来自多个文件的列与跨多行数据的计算结合起来

  • -1

如何将多个文件中的选定列合并到一个文件中,并对相邻行数据进行一些计算?

这是一个示例:来自多个设备的多个数据文件,每个数据文件每个月报告多个传感器的数据。所以有一个文件/设备/月,我想要一个文件/传感器。

以下是一些示例数据和预期输出。

示例数据文件device0_202105.csv:

Date;Time;Timestamp;PM2_5;AQI;PM10;CO2
2021/05/01;00:00:49;1619827249;21.0;70;29.0;413
2021/05/01;00:10:49;1619827849;20.0;68;37.0;409
2021/05/01;00:20:49;1619828449;21.0;70;39.0;412
2021/05/03;08:10:39;1620029439;33.0;95;43.0;430
2021/05/03;08:20:39;1620030039;33.0;95;50.0;427
2021/05/03;08:30:39;1620030639;35.0;99;38.0;429
2021/05/03;08:40:39;1620031239;33.0;95;46.0;431
2021/05/03;18:10:39;1620065439;12.0;50;18.0;425
2021/05/03;18:20:39;1620066039;12.0;50;18.0;426

示例数据文件device0_202106.csv:

Date;Time;Timestamp;PM2_5;AQI;PM10;CO2
2021/06/01;08:19:16;1622535556;19.0;66;30.0;426
2021/06/01;08:29:16;1622536156;20.0;68;33.0;454
2021/06/01;08:39:16;1622536756;24.0;76;31.0;456
2021/06/01;20:49:16;1622580556;36.0;102;32.0;447

示例数据文件device1_202105.csv:

Date;Time;Timestamp;PM2_5;AQI;PM10;CO2
2021/05/03;11:14:59;1620040499;19.0;66;20.0;438
2021/05/03;11:15:09;1620040509;19.0;66;20.0;486
2021/05/03;11:15:19;1620040519;18.0;63;18.0;485

我想为整个可用数据周期(此处为 202105 和 202106)为每种类型的传感器(例如 CO2)创建一个文件,data-co2.csv使用上述数据看起来像这样:

Date;Time;Device 0;Device 1
2021/05/03;10:30;429.25;469.667
2021/06/01;10:30;475.333

每个设备的数据按列报告,每个数据点是某个时间间隔内的平均值。所以一行报告原始数据的时间间隔的平均值。

我最初只考虑每个工作日只有 2 个时间间隔:早上 8:00 到 13:00 的时间间隔(标记为 10:30)和下午的时间间隔从 13:00 到 18:00(标记为 15:30 )。

我计划运行一个awk脚本,该脚本由一个bash循环遍历设备和周期文件的脚本启动。这是我的脚本的开始。但是,我无法写入输出文件(我应该使用-inplace选项吗?)。我正在考虑更简单的路线:写入临时文件并稍后连接到输出文件。

#!/bin/bash
touch data-co2.csv
gawk -v device=0 -v sensor=18 -f read-data.awk device0_202105.csv data-co2.csv
#!/bin/gawk -f
BEGIN {
    FS  = "[;/:]";
    OFS = ";";
    day  = 1 ;
    sam = 0 ; nam = 0 ; spm = 0 ; npm = 0 ;
}
FNR==NR {
    if ( $1 ~ /20[0-9]{2}/ ) {
        if ( $3 != day ) {
            if ( nam != 0 ) a[date";10:30"] = sam / nam ;
            if ( npm != 0 ) a[date";15:30"] = spm / npm ;
            day = $3 ;
            sam = 0 ; nam = 0 ; spm = 0 ; npm = 0 ;
        }
        if ( strftime("%u", $7, 1) < 6) {
            if ( $4 >= 8 && $4 <= 12 ) {
                sam += $sensor ;
                ++nam ;
            }
            else if ( $4 >= 13 && $4 < 18 )  {
                spm += $sensor ;
                ++npm ;
            }
        }
        date = $1"/"$2"/"$3 ;
    }
    next ;
}
{
    if ( device == 0 ) {
       for ( i in a ) {
           print i, a[i] ;
       }
    }
    else {
       i = $1"/"$2"/"$3";10:30" ;
       j = $1"/"$2"/"$3";15:30" ;
       print $0, a[i] ;
       print $0, a[j] ;
    }
}

请注意,每台设备上报数据的时间不同,可能会因设备故障、网络问题等原因导致数据丢失。

根据评论进行编辑。

bash awk
  • 1 个回答
  • 149 Views
Martin Hope
macxpat
Asked: 2019-12-02 21:41:41 +0800 CST

awk : 提取 RegExp 模式匹配的实际值

  • 0

在下面的 awk 代码部分中,file包含一个带有完整 Linux 路径的文件名,其中可能包括backup-YYMMDDYYMMDD 是日期的类型的目录。

我想将 YYMMDD 分配给isDate[file],即isDate[file]=YYMMDD。

我怎样才能做到这一点?

for (file in files) {
        if ( file ~ /(^|\/)(library|labs data|current)(\/|$)/ ) {
           isKeep[file]
        }
        else if ( file ~ /(^|\/)(backup-[0-2][0-9][0-1][0-9][0-3][0-9])(\/|$)/ ) {
            isDate[file]
        }
        else {
            isDelete[file]
        }
}
awk gawk
  • 1 个回答
  • 1058 Views
Martin Hope
macxpat
Asked: 2019-12-01 08:35:41 +0800 CST

使用 shell 工具 awk 编辑 fslint 的输出 | grep | sed

  • 1

任务是根据一组规则将此文本文件(实用程序的输出fslint)转换为 bash 脚本,其中包含rm要删除的重复文件的命令行和要保留的文件的注释行。

规则基本上是说:只删除特定目录中的重复文件。

目标是清理多年来在多个操作系统(Mac OS X、Windows、Linux)上积累的大约 1 TB 的重复数据。所有数据都已复制到 Linux 驱动器。

#3 x 697,612,024        (1,395,236,864) bytes wasted
/path/to/backup-100425/file_a.dat
/another/path/to/backup-disk-name/171023/file_a.dat
/yet/another/path/to/labs data/some/path/file_a.dat
#4 x 97,874,344 (293,634,048)   bytes wasted
/path/to/backup-100425/file b.mov
/another/path/to/backup-140102/file b.mov
/backup-120708/Library/some/path/file b.mov
/some/other/path/to/backup-current/file b.mov
#2 x 198,315,112        (198,316,032)   bytes wasted
/path/to/backup-100425/file_c.out
/another/path/to/backup-disk-name/171023/file_c.out

第一行表示有 3 个相同的副本,file_a.dat接下来的 3 行列出了它们的路径。理想情况下,应在此处删除 2 个副本。带有 6 位数字的目录(YYMMDD 格式的日期)就是我所说的历史备份目录。

将按此顺序应用于每组相同文件的规则是:

  1. 如果文件位于包含目录的路径中Library,请保留它。
  2. 如果文件在labs dataor中backup-current,请保留它,并删除历史备份目录中的所有重复项。
  3. 如果文件位于历史备份目录中,请将文件保留在最新的备份目录中,并删除较旧的副本。
  4. 否则保留文件。

这是所需的输出:

#!/bin/bash
#3 x 697,612,024        (1,395,236,864) bytes wasted
rm '/path/to/backup-100425/file_a.dat'
rm '/another/path/to/backup-disk-name/171023/file_a.dat'
#/yet/another/path/to/labs data/some/path/file_a.dat
#4 x 97,874,344 (293,634,048)   bytes wasted
rm '/path/to/backup-100425/file b.mov'
rm '/another/path/to/backup-140102/file b.mov'
#/backup-120708/Library/some/path/file b.mov
#/some/other/path/to/backup-current/file b.mov
#2 x 198,315,112        (198,316,032)   bytes wasted
rm '/path/to/backup-100425/file_c.out'
#/another/path/to/backup-disk-name/171023/file_c.out

我对 shell 工具 awk、grep 和 sed 不是很熟悉,在阅读了这个帖子后,我意识到我的初稿在概念上是错误的,“对 [I] 在命令式语言(如 C)中所做的事情的天真翻译”。

事实上,我们在这里处理的不是文件,而是一个文件的内容。

在这种情况下使用 shell 脚本是否合适?
如果是的话,一个高效的脚本会是什么样子?

编辑:在阅读了@Ed的答案和代码后,我试图澄清任务和要求,完美地解决了这个问题。

shell-script awk
  • 2 个回答
  • 96 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve