CSV 파일에서 행 제거

CSV 파일에서 행 제거

다음과 같은 파일 공유 경로, 사용자 이름 및 권한이 포함된 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 구문은 생성할 테이블의 구조에 맞게 구체화/적용됩니다.

관련 정보