我有这样的输出:
dn: CN=XXX XXX,OU=XXX,OU=XXX,O=XXX
cn: XXX XXX
telephonenumber: 1234
dn: CN=XXX XXX,OU=XXX,OU=XXX,O=XXX
cn: XXX XXX
telephonenumber: 1090
dn: CN=XXX XXX,OU=XXX,OU=XXX,O=XXX
cn: XXX XXX
telephonenumber: 1012
我从简单的ldapsearch
命令获得此输出。
我想将此输出存储在一个数组中,以便我可以echo
索引并获得一个ldap条目,如
echo ${ldaparray[1]}
dn: CN=XXX XXX,OU=XXX,OU=XXX,O=XXX
cn: XXX XXX
telephonenumber: 1090
所以我猜数组分隔符将是一个空的新行。
答案 0 :(得分:1)
在awk的帮助下,这是构建阵列的一种方法:
ldaparray=()
while IFS='' read -d '' -r record; do
ldaparray+=( "$record" )
done < <(awk -v RS= -v ORS='\0' '1' file)
将RS
设置为空字符串会使awk将每个文本块视为单独的记录。 1
始终为true,因此每条记录都会打印,由ORS
分隔,为空字节。
循环读取每个记录并向数组添加值。
如果您想使用命令的输出而不是文件的内容,请将<(awk ... file)
更改为<(command | awk ...)
。
答案 1 :(得分:0)
您不必将其存储在数组中,但可以使用以下脚本来获取第i个条目。
用法:
./print_index.sh filename index
示例,要从文件sample.txt打印第二个条目,请使用
./print_index.sh sample.txt 2
FILE=$1
INDEX=$2
LINE_NUMBER=`cat $FILE| grep -n "telephonenumber"| awk -F':' {'print $1'}| head -$INDEX| tail -1`
head -$LINE_NUMBER $FILE| tail -3