다음과 같은 파일 공유 경로, 사용자 이름 및 권한이 포함된 csv 파일이 있습니다.
"FolderName";"ADGroupOrUser";"Permissions"
\\path\1 - folder 01\1 - folder2; user.user; Modify, Synchronize
\\path\1 - folder 01\1 - folder2; user1.user1; Modify, Synchronize
\\path\1 - folder 01\1 - folder2; user2.user2; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\1 - folder3; user.user; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\1 - folder3; user1.user1; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\1 - folder3; user2.user2; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\1 - folder3\folder4; user.user; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\1 - folder3\folder4; user1.user1; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\1 - folder3\folder4; user2.user2; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\2 - folder1; user.user; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\2 - folder1; user1.user1; Modify, Synchronize
\\path\1 - folder 01\1 - folder2\2 - folder1; user2.user2; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user.user; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user1.user1; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user2.user2; Modify, Synchronize
...
처음 3줄을 보면 알 수 있듯이 폴더 경로는 동일하지만 사용자가 다릅니다.
네트워크 경로 아래에 6줄 아래에 또 다른 폴더가 있지만 상위 폴더에서 상속되므로 사용자 및 권한이 동일합니다.
아이디어는 파일에서 이 6줄을 제거하는 것입니다. 권한이 상속되면 이후의 모든 항목이 동일한 사용자 및 권한을 가지게 되기 때문입니다.
\\path\1 - folder 01\1 - folder2\1 - folder3
\\path\1 - folder 01\1 - folder2\1 - folder3\folder4
이 경우 최종 결과는 다음과 같아야 합니다.
"FolderName";"ADGroupOrUser";"Permissions"
\\path\1 - folder 01\1 - folder2; user.user; Modify, Synchronize
\\path\1 - folder 01\1 - folder2; user1.user1; Modify, Synchronize
\\path\1 - folder 01\1 - folder2; user2.user2; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user.user; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user1.user1; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user2.user2; Modify, Synchronize
bash(MacOS)를 사용하여 파일을 처리하고 있습니다.
이 같은
grep -v "\\path\1 - folder 01\1 - folder2*"
경로에 더 많은 폴더가 있습니다.
\\path\1 - folder 01\1 - folder2*
그런 다음 삭제
답변1
$ { head -n 1; grep -E '^.{32};'; } < file
"FolderName";"ADGroupOrUser";"Permissions"
\\path\1 - folder 01\1 - folder2; user.user; Modify, Synchronize
\\path\1 - folder 01\1 - folder2; user1.user1; Modify, Synchronize
\\path\1 - folder 01\1 - folder2; user2.user2; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user.user; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user1.user1; Modify, Synchronize
\\path\2 - folder 01\1 - folder2; user2.user2; Modify, Synchronize
이것이 실제로 필요한 것이 아닌 경우 더 나은 요구 사항을 제공하도록 질문을 편집하십시오.
답변2
awk
다음 명령을 사용할 수 있습니다 .
awk -F\\ 'NF<4{ print}' input_file
이는 \
구분 기호 역할을 하며 필드 수를 계산합니다. 필드가 4보다 작으면 인쇄합니다.
PS 게시물을 편집하고 예제를 변경하면 명령이 다음과 같이 변경됩니다.
awk -F\\ 'NF<6{ print}' input_file
답변3
모두의 도움에 감사드립니다. 나에게 맞는 솔루션을 찾았습니다.
grep -v "path\\\\1.-.folder.01\\\\1.-.folder2\\\\"
답변4
이 작업을 한 번에 수행하려면 csv를 MS Excel 또는 LibreOffice로 가져오고(";"로 구분된 파일을 가져오고 간단한 필터를 사용하여 경로에서 "" 문자를 계산하는 해당 줄을 제거합니다. > 1 즉, 수식이 포함된 열 추가 -> LEN(셀 파일 공유 경로) - LEN(SUBSTITUTE(파일 공유 경로, "", "")) > 1
반면에 프로세스를 구축할 계획이라면 SQL 데이터베이스를 사용하고 ";"로 구분된 필드가 있는 파일을 가져온 후 DELETE 명령을 사용하여 쿼리/저장 프로시저를 설정합니다. 즉, DELETE * FROM <imported_table> WHERE LEN() - LEN(REPLACE(, "", "")) >1 구문은 생성할 테이블의 구조에 맞게 구체화/적용됩니다.