按原始文件递归分组符号链接

按原始文件递归分组符号链接

我在文本文件中有一个结构类似于以下内容的列表:

symlink("toolbox", "/system/bin/schedtop");
symlink("toolbox", "/system/bin/sendevent");
symlink("toolbox", "/system/bin/setconsole");
symlink("toolbox", "/system/bin/setenforce");
symlink("toolbox", "/system/bin/setprop");
symlink("toolbox", "/system/bin/setsebool");
symlink("mksh", "/system/bin/sh");

我想要做的是使用 Bash 脚本将它们更改为如下所示:

symlink("toolbox", "/system/bin/schedtop", "/system/bin/sendevent", "/system/bin/setconsole", "/system/bin/setenforce", "/system/bin/setprop", "/system/bin/setsebool")
symlink("mksh", "/system/bin/sh");

这意味着根据原始文件(在本例中为toolbox.

目前我只是按名称对文件进行排序,但这当然并不令人满意!有人能指出我正确的方向吗?

答案1

awk非常适合此类分组任务,例如:

$ awk -F'"' ' { a[$2]=a[$2] ", \""$4"\"" } 
        END { for(i in a) printf("symlink(\"%s\"%s);\n", i, a[i]); }' input

您的示例的输出:

symlink("toolbox", "/system/bin/schedtop", "/system/bin/sendevent",
                   "/system/bin/setconsole", "/system/bin/setenforce", 
                   "/system/bin/setprop", "/system/bin/setsebool");
symlink("mksh", "/system/bin/sh");

(添加换行符是为了更好的布局)

where-F'"'指示awk将双引号字符解释为字段分隔符。$2等引用第二个等字段,对于每一行,都会向关联数组添加/修改一个条目a。该END操作迭代关联数组的每个键并漂亮地打印组。

相关内容