我的问题有点长,我试图让签入和签出系统变得简单,菜单上有选项 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,则必须打印数字(如果有差异)希望你理解我的问题
答案1
如果这是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)
是为了确保我们在到达数据的Overtid: 0
第一行时不会得到虚假的输出。Dato:
代码中的语句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: 870