ソースファイルごとにシンボリックリンクを繰り返しグループ化

ソースファイルごとにシンボリックリンクを繰り返しグループ化

次のように構成されたテキストファイルにリストがあります。

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");

(より良いレイアウトのために改行が追加されました。)

ここでは、二重引用符文字がフィールド区切り文字として解釈されることを-F'"'示します。 etc は 2 番目の etc フィールドを参照し、各行に対して項目が連想配列に追加/変更されます。この操作は、連想配列の各キーを繰り返し、グループをきれいに印刷します。awk$2aEND

おすすめ記事