gpt4 book ai didi

linux - 如何在 Bash 中格式化更多变量并按照预期顺序将其放入同一个 .txt 文件中?

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

我正在尝试解决 Bash 中的一项挑战。我有很多包含注册数据的 .txt 文件。我想制作一个新的 .txt 文件,每天存储新的注册用户,并在文件末尾的新行中存储用户总数。

我的脚本已经几乎以正确的方式工作(从结果来看),我尝试用不同的括号解决它或将数据带到变量中。

无论如何,这是我的脚本:

route_from=/route/*
saved=daily_registrations.txt
var1=Total_registrations:

cat $route_from | cut -f1,2 -d' ' | sort -V | uniq -c > /route/$saved #Cuts New users number | file number | date
echo $var1 >> /route/$saved #"Total_registrations:"
cat $route_from | wc -l >> /route/$saved #Total user number

我希望 .txt 文件中的输出结果是这样的(我采用竖线只是为了更好地查看)。

New users number | file number | date
New users number | file number | date
New users number | file number | date
Total_registrations: number

但现在我的实际输出是这样的:

New users number | file number | date
New users number | file number | date
New users number | file number | date
Total_registrations:
number

最佳答案

你的最后两行每行都给出了一个定向到文件的输出,根据 bash 的性质,它们都写在单独的一行上。我建议您将它们组合起来同时输出,使用子 shell 计算行数:

echo $var1 $(cat $route_from | wc -l) >> /route/$saved

echo $var1 `cat $route_from | wc -l` >> /route/$saved

这应该使用相同的 echo 命令写入 $var 的内容以及文件中的行数。

除此之外,最好不要 cat 文件 a 并通过 wc 命令对其进行管道传输,这可以使用这样的重定向来完成:

wc -l < $route_from

对于我系统上大约 500 行并运行 1000 次的文件,它要快一些:

[user@host ~]$
time for i in `seq 1000`; do cat $route_from | wc -l > /dev/null; done

real 0m2.480s
user 0m0.814s
sys 0m1.783s
[user@host ~]$ time for i in `seq 1000`; do wc -l < $route_from > /dev/null; done

real 0m1.971s
user 0m0.537s
sys 0m0.855s
[user@host ~]$

所以我会这样做:

echo $var1 `wc -l < $route_from` >> /route/$saved

关于linux - 如何在 Bash 中格式化更多变量并按照预期顺序将其放入同一个 .txt 文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55541831/

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