手入力ファイルを使用していますが、解析に問題があります。私のファイル入力ファイルは変更できず、私のコードの言語は bash スクリプトから変更できません。
わかりやすいように例を作ってみました^^
var="hey","i'm","happy, like","you"
IFS="," read -r one two tree for five <<<"$var"
echo $one:$two:$tree:$for:$five
ここで、すでに問題を見たと思います。私は取得したいです
hey:i'm:happy, like:you:
しかし、私は得る
hey:i'm:happy: like:you
read
「 」が IFS よりも重要であることを に伝える方法が必要です。コマンドについて読みましたeval
が、そのリスクを冒すことはできません。
最後にこれはディレクトリ ファイルであり、面倒なフィールドは説明フィールドなので、基本的に何でも入る可能性があります。
そのように見える元のファイル
"type","cn","uid","gid","gecos","description","timestamp","disabled"
"type","cn","uid","gid","gecos","description","timestamp","disabled"
"type","cn","uid","gid","gecos","description","timestamp","disabled"
編集#1
もっと良い例を挙げましょう。上記で使用したものは単純すぎて、@StefanHegny が別のエラーを引き起こすことがわかりました。
while read -r ldapLine
do
IFS=',' read -r objectClass dumy1 uidNumber gidNumber username description modifyTimestamp nsAccountLock gecos homeDirectory loginShell createTimestamp dumy2 <<<"$ldapLine"
isANetuser=0
while IFS=":" read -r -a class
do
for i in "${class[@]}"
do
if [ "$i" == "account" ]
then
isANetuser=1
break
fi
done
done <<< $objectClass
if [ $isANetuser == 0 ]
then
continue
fi
#MORE STUFF APPEND#
done < file.csv
これはコードのごく一部ですが、私が何をしているのかを説明する必要があります。次のfile.csv
ような行がたくさんあります。
"top:shadowAccount:account:posixAccount","Jdupon","12345","6789","Jdupon","Jean Mark, Dupon","20140511083750Z","","Jean Mark, Dupon","/home/user/Jdupon","/bin/ksh","20120512083750Z","",""