我的问题有点长,我试图使一个签入和退出系统简单,菜单上有选项1签入和2结帐在结束时,我回家。我的文件包含:
Dato: 22-02-2018
Mødt ind: 700
Gået hjem: 1600
Overtid:
Dato: 23-02-2018
Mødt ind: 730
Gået hjem: 1600
Overtid:我要在这份文件中找出730和1600的区别。如果数字高于800,它必须打印数字,如果有差异,希望您理解我的问题。
发布于 2018-02-23 10:06:02
如果您想填写的是Overtid:,那么下面是这样做的:
awk 'function overtime(s,e) {
if (s) printf("Overtid: %d\n", (e - s > 800) ? e - s : 0);
}
/^Mødt ind:/ { start = $NF; print }
/^Gået hjem:/ { end = $NF; print }
/^Dato:/ { overtime(start, end); print }
END { overtime(start, end) }' file这将从数据中选择开始和结束时间,对于每个Dato:行(这意味着数据中的一个新记录),它会打印出上一条记录的超时时间。这也是在末尾( END块)完成的。
我已经将overtime()作为一个函数来完成,因为我们需要在脚本中的两个不同位置执行相同的操作。函数中的if (s)是为了确保当我们到达数据中的第一条Dato:线时,不会得到虚假的D7输出。
代码中的print语句通过现有数据传递到输出。
输出您的数据:
Dato: 22-02-2018
Mødt ind: 700
Gået hjem: 1600
Overtid: 900
Dato: 23-02-2018
Mødt ind: 730
Gået hjem: 1600
Overtid: 870https://unix.stackexchange.com/questions/426061
复制相似问题