我需要帮助在写一个脚本在巴什。
基本上我有一个文件,其中包含组名称和组成员
文件的eq
组1
会员1
会员2
组2
会员3
会员4
会员5
..
我想在命令中运行它们,
command name Group 1 member.1 Member1, member.2 Member2,...
当它到达空行时,移动到
Group 2 member.1 Member3, ...
依此类推,直到文件结束。
最终结果将是列出可以在以后执行的命令
名称组1 member.1路由器1,member.2路由器2
名称组2 member.1路由器3、member.2路由器4、member.3路由器4
名称组3 member.1用户X,member.2用户Y,..
不知道如何设置逻辑,因为我是初学者
谢谢你
1条答案
按热度按时间7dl7o3gd1#
使用GNU Awk:
为什么我们有测试
i <= NF && $i
而不仅仅是i <= NF
,因为\n
(换行符)是字段 * 分隔符 *FS
而不是字段 * 终止符 *,最后一条记录看起来像是有一个额外的空白字段。最后一条记录后面没有另一条记录,因此记录分隔符\n\n
不会出现在其最后一个字段之后。因此,出现的终止\n
被解释为字段分隔符,导致额外的空白字段。编辑:因为问题中的示例以
, ...
结尾,所以我没有遵循逗号是终止符还是分隔符的任何要求。这将删除尾随逗号:我常用的分隔符技巧是写一个条件,对第一个元素作出React;比如虚拟变量
i
为零,或者在这种情况下为2。也就是说,我们把分隔符看作是每一项的前缀。在像
a, b, c
这样的列表中,一种看待它的方法是c
缺少一个尾随逗号。但另一种看待它的方式是第一个元素a
缺少前导,
(逗号+空格)。对于a
以外的所有元素,我们首先输出,
,然后输出元素。我通常更喜欢这样,因为
i == 0
比i == n - 1
更好。在这种情况下,它特别方便,因为我们有复杂的终止条件i <= NF && $i
,所以最后一个元素不是固定索引NF
。但第一个元素是固定的。此外,在第一个元素没有出现在固定索引处的情况下(比如说我们正在从列表中过滤项目,并希望它们以逗号分隔),我们可以使用标志!
同样,我们不能有一个标志来告诉我们哪个项目是最后的;除了一个特殊的情况,我们没有办法知道哪一项可能是最后一项。