次のように構成されたテキストファイルにリストがあります。
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
$2
a
END