我有一个包含时间和任务的CSV文件:
0800,take out trash
1000,read a book
1230,have lunch
1300,buy groceries
1600,meet with friends
2000,go to sleep
我想创建一个脚本,该脚本在运行时将当前时间与第一个字段中的时间进行比较。如果现在的时间大于该字段,则应删除该行。
我不知道从哪里开始,我也不是一个程序员。
答案 0 :(得分:0)
使用GNU awk和strftime
:
$ awk -F, 'strftime("%H%M")<$1' file
2359,hack the planet
答案 1 :(得分:0)
这可以完成工作
#!/usr/bin/env bash
date=$(date +%H%M)
while read line; do
if [ $(echo $line | cut -d ',' -f1) -gt $date ]; then
echo $line
fi
done < $1
测试:
$ cat foo
10,a
20,b
2010,b
2020,b
2110,b
$ date
Di 5 Feb 2019 20:18:46 CET
$ ./script.sh foo
2020,b
2110,b
但是您必须稍微改善bashscript,使其更加坚固!我的代码是“概念证明”
答案 2 :(得分:0)
在与date
比较并使用默认操作之前,使用$1
设置变量的混合会有轻微变化:
awk -F, -v t=$(date '+%H%M') '$1 > t' file
示例
$ echo $(date '+%H%M')
1341
$ awk -F, -v t=$(date '+%H%M') '$1 > t' file
1600,meet with friends
2000,go to sleep
答案 3 :(得分:-1)
除此以外,明显的缺陷(没有日期成分)和天真的CVS(无引号的字符串)应该很简单:
我稍微修改了您的文件(由于当前时间):
$ cat time.csv
0400,take out trash
0600,take out trash
0800,take out trash
1000,read a book
1230,have lunch
1300,buy groceries
1600,meet with friends
2000,go to sleep
我当前的时间:
06:36:49
大量运行:
awk 'BEGIN{ "date \"+%H%M\""|getline time} $1>time' time.csv
0800,take out trash
1000,read a book
1230,have lunch
1300,buy groceries
1600,meet with friends
2000,go to sleep
您只需要捕获输出并替换文件即可。
awk 'BEGIN{ "date \"+%H%M\""|getline time} $1>time' time.csv > time.new && mv time.new time.csv