【发布时间】:2016-07-24 10:55:59
【问题描述】:
我对编程非常陌生,并决定学习 bash,因为我们处理一些基于 Linux/Unix 的日志服务器,因此编写脚本更容易一些。
我有一个 cvs 文件,其布局如下:
PC、用户、文件、路径 - 全部以逗号分隔。
我有一个以行分隔的文件名白名单。有些包括空格。
我的目标是将白名单与 csv 文件的第 3 列进行比较,并输出所有不匹配的行。我尝试了一个带有 if 语句的 while read 循环,但似乎无法让它工作。我已经做了一些 awk one 衬里,实际上从过去的 stackoverflow 帖子中得到了一个,该帖子输出了与白名单匹配的行,但我似乎无法弄清楚如何反转逻辑以使其工作。代码如下。
awk 'BEGIN{i=0}
FNR==NR { a[i++]=$1; next }
{ for(j=0; j<i; j++)
if(index($0,a[j]))
{print $0;break}
}' $whitelist $exestartup
我想坚持使用没有附加组件的基本 bash,并且不反对使用循环/if 语句而不是 awk one liner。
示例输入/输出:
白名单.txt
程序.exe
超级程序.exe
可能的程序.exe
exestartup.csv
Asset1,user1,potato.exe,c:\users\user1
Asset2,user2,program.exe,c:\users\user2
Asset3,user3,possible-program.exe,c:\users\user3
Asset4,user4,super program.exe,c:\users\user4
输出
Asset1,user1,potato.exe,c:\users\user1
【问题讨论】: