我有一个 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 语法将被细化/适应您将创建的表的结构