我在文本文件中有一个结构类似于以下内容的列表:
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
操作迭代关联数组的每个键并漂亮地打印组。