gpt4 book ai didi

linux - 有条件地将行附加为列 bash 脚本

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:51:27 26 4
gpt4 key购买 nike

我一直在尝试编写一个正确格式化命令输出的 bash 脚本。输出将多列作为单个记录列表:

host="host1"
Disk Agent="A.06.20"
General Media Agent="A.06.20"
host="host2"
Disk Agent="A.06.20"
General Media Agent="A.06.20"
host="host3"
Disk Agent="A.06.20"
host="host4"
Disk Agent="A.06.20"
General Media Agent="A.06.20"

我希望脚本格式如下:

host="host1",Disk Agent="A.06.20",General Media Agent="A.06.20"
host="host2",Disk Agent="A.06.20",General Media Agent="A.06.20"
host="host3",Disk Agent="A.06.20",
host="host4",Disk Agent="A.06.20",General Media Agent="A.06.20"

如您所见,并非每个主机都具有所有 3 个值,因此它不能只迭代列表。

我的输出中有数百台主机,令人非常沮丧的是该命令没有用于创建表格或报告的选项。

输出中还有一堆其他垃圾,我已经能够 sed 了,但我对 sed 和 awk 还很陌生,所以这让我很头疼。

谢谢!

最佳答案

这是一个 sed 脚本:

sed '/host/{:loop; N; /\nhost/!s/\n/,/; t loop; P; D}' foo.txt

它的工作原理是匹配主机,然后附加下一行。如果下一行不是以 host 开头,它将用\n 代替逗号。当您到达下一个“主机”行时,循环终止。 P 命令打印\n 之前的多行模式空间部分,D 删除这部分并将控制转移到脚本的顶部,以便下一个“主机”行成为当前行并且脚本再次开始。

哪些输出:

host="host1",Disk Agent="A.06.20",General Media Agent="A.06.20"
host="host2",Disk Agent="A.06.20",General Media Agent="A.06.20"
host="host3",Disk Agent="A.06.20"
host="host4",Disk Agent="A.06.20",General Media Agent="A.06.20"

关于linux - 有条件地将行附加为列 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30550085/

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