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

相关内容