gpt4 book ai didi

linux - 从 shell 脚本更新文件中的计数器

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:11 24 4
gpt4 key购买 nike

我有一个 txt 文件,其中包含传输到 diff 远程机器的文件统计信息,如下所述

172.31.32.5 yes 2
172.31.32.6 yes 3

现在,当另外 3 个文件传输到第一台机器时,我希望文件从 shell 脚本更新到下面

172.31.32.5 yes 5
172.31.32.6 yes 3

我本来打算用这样的东西

sed -i '/$IP/d' /tmp/fileTrnsfr
echo "$IP yes $((oldcount + newcount))

但正在寻找更好的解决方案,使用 sed 或 awk 命令进行搜索、更新和替换

最佳答案

您可以使用 Awk 来实现这一点。您需要将包含 IP 信息和文件数的变量导入到 Awk 的上下文中并进行修改。

temp_file="$(mktemp)"
awk -v ip="$ip" -v count="$newcount" '$1==ip{$NF+=count}1' /tmp/fileTrnsfr > "$temp_file" && mv "$temp_file" /tmp/fileTrnsfr

mktemp 用于创建一个临时名称,用于写入Awk 的内容并将其移回原始文件名(模拟就地文件编辑)

以上内容适用于 Awk 的较旧的非 GNU 变体,它们不支持就地编辑。

在最新的 GNU Awk 中(从 4.1.0 released 开始),它有一个选项 "inplace" file editing :

[...] The "inplace" extension, built using the new facility, can be used to simulate the GNU "sed -i" feature. [...]

gawk -i inplace -v INPLACE_SUFFIX=.bak -v ip="$ip" -v count="$newcount" '$1==ip{$NF+=count}1' /tmp/fileTrnsfr 

关于linux - 从 shell 脚本更新文件中的计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46278546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com