u
参数扩展标志应该只输出唯一的数组值。它确实......有时。
$ stuff=(a b a c)
$ echo ${(u)stuff}
a b c
$ cat <<< ${(u)stuff}
a b a c
是什么赋予了?
u
参数扩展标志应该只输出唯一的数组值。它确实......有时。
$ stuff=(a b a c)
$ echo ${(u)stuff}
a b c
$ cat <<< ${(u)stuff}
a b a c
是什么赋予了?
我的 cli foo 中的一个弱点是awk
. 我可能可以通过精心编写的脚本来解决以下问题,但我很确定awk
这是工作的最佳工具,而对于我的一生来说,我无法找出正确的方法。
假设我有一个这样的数据文件(分类帐):
2019/05/31 (MMEX948) Gürmar
Assets:Cash:Marina ₺-28,14
Expenses:Food:Groceries:Meat ₺28,14
Assets:Cash:Marina ₺-28,14
Expenses:Food:Groceries:Meat ₺28,14
Assets:Cash:Marina ₺-3,45
Expenses:Food:Groceries:Basic ₺3,45
Assets:Cash:Marina ₺-15,00
Expenses:Food:Groceries:Produce ₺15,00
2019/06/01 (MMEX932) A101
Assets:Cash:Caleb $-3.00
Assets:Cash:Marina $-2.50
Expenses:Food:Groceries:Basic $5.50
2019/06/01 (MMEX931) Şemikler Pazar Yeri
Assets:Cash:Marina ₺-24,00
Expenses:Food:Groceries:Basic ₺24,00
Assets:Cash:Marina ₺-31,00
Expenses:Food:Groceries:Meat ₺31,00
Assets:Cash:Marina ₺-65,00
Expenses:Food:Groceries:Produce ₺65,00
每个空行分隔的段落是一个事务,每个缩进的行是一个过帐,每个过帐都有一个帐户和一个金额(至少由 2 个空格分隔)。
我希望这些数据发生两件事。我不在乎这些是否发生在同一个命令中,根据工具的不同,一次或两次可能更容易完成......
所有负金额的过账都应安排在正金额的过账之后。
应合并任何负金额和重复帐户的过帐。理想情况下,金额会相加,但由于货币格式,这真的很复杂,而且没有必要,因为我可以重新生成金额行。只要每次通过合并的唯一帐户不超过一个,从合并的帖子中完全删除金额就足够了。
结果应如下所示:
2019/05/31 (MMEX948) Gürmar
Expenses:Food:Groceries:Meat ₺28,14
Expenses:Food:Groceries:Meat ₺28,14
Expenses:Food:Groceries:Basic ₺3,45
Expenses:Food:Groceries:Produce ₺15,00
Assets:Cash:Marina
2019/06/01 (MMEX932) A101
Expenses:Food:Groceries:Basic $5.50
Assets:Cash:Marina $-2.50
Assets:Cash:Caleb
2019/06/01 (MMEX931) Şemikler Pazar Yeri
Expenses:Food:Groceries:Basic ₺24,00
Expenses:Food:Groceries:Meat ₺31,00
Expenses:Food:Groceries:Produce ₺65,00
Assets:Cash:Marina
使这比仅扫描重复项更复杂的注释:
我将如何解决这个问题awk
?或者如果 awk 不是最好的解决方案,那是什么?在大多数脚本语言(perl、python、zsh)中,我会解析所有内容,将其全部放入多维数组中,然后根据 ammount 的正则表达式匹配进行排序,然后根据帐户的 alpha 进行排序,然后对其进行迭代以输出它,始终删除最后一个数量并仅合并最后一个副本(如果有)。
请注意,前几天我确实想出了一种方法来解析和合并 Awk 中的重复事务:
awk 'NF { if (/^20/) { if (last != $$0) print "\n" $$0; last = $$0 } else { print $$0 } }' |
但更复杂的 awk 逻辑现在正在挑战我。
我有一个 systemd 服务(一个 CI 运行程序),它往往会因 CPU 密集型作业而使系统陷入困境。我刚刚发现平均负载超过 100,并想停止这种胡说八道。
系统上的任何其他内容都不受任何限制,因此我希望其他所有内容都像现在一样继续运行,但要么:
... 对系统上的所有其他内容起到次要作用。事实上,即使系统上没有其他东西需要剩余 10% 的 CPU 周期,我也希望他们有 90% 的绝对上限,但如果有其他任何东西都需要 CPU 时间,我希望他们获得尽可能多的 CPU 时间他们想先。
配置它的最佳方法是什么?我在 EC2 上运行 Arch Linux,并且有可用的 cgroup(包括 cgmanager),但从未使用过它们。