Bash-使用awk解析CSV中的值,然后通过ldap搜索返回值

Bash-使用awk解析CSV中的值,然后通过ldap搜索返回值,bash,csv,awk,ldap,Bash,Csv,Awk,Ldap,尝试将CSV馈送到Bash shell脚本中,然后使用awk对其进行解析,以获取要馈送到ldapsearch中的用户名。然后我想从ldapsearch返回值,指示用户是活动的还是非活动的 在我讲到awk部分之前,一切都正常。我想我的语法错了。当前在源代码第1行接收:awk:非法语句 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

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

在我讲到awk部分之前,一切都正常。我想我的语法错了。当前在源代码第1行接收:awk:非法语句

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.
当IFS=','读取-r f1 f2 f3 f4 f5 f6 f7 f8 f9
做
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
#我想你想在这里花8美元吧
完成<“$csv_文件”
#…^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^。

Awk不是外壳。您不能直接从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'


阅读以了解awk,了解shell,并了解有关shell中循环的更多信息。

实际上只是抓住了后面的括号-但现在命令似乎只是挂起,没有输出。请编辑您的问题以反映您的最新更新。谢谢,Ed。-数据列有一个需要说明的空间。我的最终配方如下所示:
cut-d,-f8“$csv_File”| sed's/*/“&”/“|
xargs-n1-I{}ldapsearch-Hldap://domain -x-D“$admin@domain“-w”$ad_Password“-b”CN={},OU=Contractors,OU=People,DC=domain,DC=controller“-s sub”(CN=*)“CN useraccountcontrol
您绝对不需要将管道切割到sed。使用
xargs-d'\n'…
代替GNU xargs。我更新了答案以显示这一点。如果在您的xargs中不起作用,请告诉我,我们将使用awk解决方案,而不是cut+sed。获取
xargs:invalign选项--d
,正如我所说的-“上面使用GNU xargs表示-d'\n.”和“使用xargs-d'\n'…而不是GNU xargs”?获取GNUxargs,我对重新讨论一周前的问题不感兴趣。