다음과 같이 구성된 텍스트 파일에 목록이 있습니다.
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 는 두 번째 etc 필드를 참조하며 각 행에 대해 항목이 연관 배열에 추가/수정됩니다 . 이 작업은 연관 배열의 각 키를 반복하고 그룹을 예쁘게 인쇄합니다.awk
$2
a
END