Bash -使用awk从CSV中解析值,然后通过ldap-search返回值



尝试将CSV提供给Bash shell脚本,然后用awk对其进行解析,以获取要提供给ldapsearch的用户名。然后我想从ldapsearch返回值,指示用户是活动的还是不活动的。

一切都很顺利,直到我走到awk部分。我觉得我的语法错了。当前在源代码行1接收到:awk: illegal语句。

echo Enter path to CVS:
read csv_File
input="$csv_File"
while IFS=',' read -r f1 f2 f3 f4 f5 f6 f7 f8 f9
do
    awk 'BEGIN { FS = "," ; ldapsearch -Hldap://splunk.local -x -D "$admin@ldap.server" -w $ad_Password -b "CN=$8,OU=Standard,OU=People,DC=domain,DC=controller" -s sub "(cn=*)" cn useraccountcontrol'
done 

您有一个没有输入的while-read循环,因此shell正在等待您输入一些行以便read可以读取它。

你认为你需要awk做什么?您已经将逗号分隔的字段读取到变量中。你可能只需要像

这样的东西
while IFS=',' read -r f1 f2 f3 f4 f5 f6 f7 f8 f9
do
    ldapsearch -Hldap://splunk.local -x -D "$admin@ldap.server" -w "$ad_Password" -b "CN=$f8,OU=Standard,OU=People,DC=domain,DC=controller" -s sub "(cn=*)" cn useraccountcontrol
    # ....................................................................................^^ you want $f8 here, I presume
done < "$csv_File"
# ...^^^^^^^^^^^^^ you need to give `read` something to read.

Awk不是shell。你不能直接从awk脚本中调用一些UNIX程序,比如ldapsearch——这就是shell的作用,awk是用来操作文本文件的。

你根本不需要/想要awk或shell循环,你只需要:

cut -d, -f8 "$csv_File" |
xargs -d 'n' -n 1 -I {} ldapsearch -Hldap://splunk.local -x -D "$admin@ldap.server" -w "$ad_Password" -b "CN={},OU=Standard,OU=People,DC=domain,DC=controller" -s sub "(cn=*)" cn useraccountcontrol'

上面使用GNU xargs作为-d 'n'

阅读Arnold Robbins的《Effective Awk Programming, 4th Edition》来学习Awk,阅读Chris Johnson的《Shell Scripting Recipes》来学习Shell,阅读why-is-using- Shell -loop to process-text- thought -bad-practice来学习更多关于Shell中的循环的知识。

最新更新