2016-10-04 2 views
1

CSVをBashシェルスクリプトに入力しようとすると、awkで解析され、ユーザー名がldapsearchに入力されます。次に、ユーザーがアクティブか非アクティブかを示す値をldapsearchから返します。Bash - awkを使用してCSVから値を解析し、ldap-searchで値を返します。

私はawkの部分になるまで、すべてが機能します。私の文法はここではないと思う。現在の受信:AWK:ソース行で違法声明1.

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 "[email protected]" -w $ad_Password -b "CN=$8,OU=Standard,OU=People,DC=domain,DC=controller" -s sub "(cn=*)" cn useraccountcontrol' 

done 

-

+0

実際には、末尾の括弧をキャッチしただけですが、コマンドは出力なしでハングアップするようです。 – gH777

+0

質問を編集して最新のアップデートを反映させてください。 –

答えて

0

Awkはシェルではありません。 awkスクリプトから直接ldapsearchのようなUNIXプログラムを呼び出すことはできません。これはシェルが対象とするものです。awkはテキストファイルを操作するためのものです。あなたがすべてで、このためのawkやシェルのループをしたい/必要はありません

は、あなたが必要なのは、次のとおりです。

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

は、上記-d '\n'のためのGNU xargsのを使用しています。

awkを学ぶにはEffective Awk Programming, 4th Edition, by Arnold Robbinsを、シェルを学習するにはShell Scripting Recipes by Chris Johnsonを、シェルのループについて詳しくはwhy-is-using-a-shell-loop-to-process-text-considered-bad-practiceを読んでください。

+1

ありがとう、エド。 - データの列には、説明が必要なスペースがありました。私の最後のレシピは次のようになりました: 'cut -d、-f8" $ csv_File "| sedの/.*/"& "/ '|' xargs -n 1 -I {} ldapsearch -Hldap:// domain -x -D "$ admin @ domain" -w "$ ad_Password" -b "CN DC =コントローラ "-sサブ"(cn = *) "cn useraccountcontrol" – gH777

+0

あなたは間違いなくパイプをsedにパイプする必要はありません。 GNU xargsではなく 'xargs -d '\ n' ...'を使用してください。私はそれを示す答えを更新しました。それがうまく動作しない場合は、あなたのxargsは私に知らせて、cut + sedの代わりにawkソリューションを使用します。 –

+0

'xargs:不正なオプションを取得する - d' – gH777

1

あなたは何の入力を与えられていないいるwhile-readループを持っているので、あなたには、いくつかの行を入力するためにシェルがそうreadを待っていますそれを読むことができます。

awkが必要な理由は何ですか?すでにコンマ区切りのフィールドを変数に読み込んでいます。あなたはおそらく何かを必要とするだけです。

while IFS=',' read -r f1 f2 f3 f4 f5 f6 f7 f8 f9 
do 
    ldapsearch -Hldap://splunk.local -x -D "[email protected]" -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. 
関連する問題