shell 从CSV或Excel工作表创建LDIF文件

um6iljoc  于 2023-02-09  发布在  Shell
关注(0)|答案(1)|浏览(150)

我的要求是,我们将要求请求者填写一个excel工作表/csv,他们将把值放在uiddn列(excel工作表中的A1)和nIds列(excel工作表中的B1)中。
例如:

指南针
用户标识符=用户标识12345,用户名= abc,用户名= def,用户名= xyx 7_54321
用户标识符=用户标识6789,用户名= abc,用户名= def,用户名= xyx 5_9876
填充这些详细信息后,bash脚本应获取这些值并创建一个名为"removenid.ldif"的ldif,ldif的内容应如下所示:

dn: uid=uid12345,cn=abc,cn=def,dc=xyx
changetype: modify
delete: nIds
nIds: 7_54321
-

dn: uid=uid6789,cn=abc,cn=def,dc=xyx
changetype: modify
delete: nIds
nIds: 5_9876
-

同时,还应创建另一个名为"groupremoval.ldif"的ldif文件,其中ldif文件内容应为:

dn: cn=ghk,cn=klm,cn=opu,dc=xyx
changetype: modify
delete: member
member: uid=uid12345,cn=abc,cn=def,dc=xyx---only this value it should take from the excel sheet

dn: cn=ghk,cn=klm,cn=opu,dc=xyx
changetype: modify
delete: member
member: uid=uid6789,cn=abc,cn=def,dc=xyx---only this value it should take from the excel sheet
yb3bgrhw

yb3bgrhw1#

第一步是将表格从Excel保存为CSV
强烈建议指定分隔符(* 在本例中为竖线 |”),因为您永远不知道何时您的输入会故意在任何字段中包含空格。 因此,空格字符是最糟糕的选择 *。
您需要创建一个宏,以自动保存 *.CSV文件,并使用经常重复使用的文件名(即总是iddnx.csv)。
然后,再次使用宏,告诉操作系统使用所需的参数运行脚本。

  • This讲述了如何创建宏。
  • This讨论了如何运行宏。
  • This讨论了如何让操作系统运行命令。
    以下脚本将生成所示的两个文件:
#!/bin/bash

DBG=0
input=""

while [ $# -gt 0 ]
do
    case $1 in
        --debug ) DBG=1 ; shift ;;
        --input ) input="${2}" ; shift ; shift ;;
        --strAlt ) strAlt="${2}" ; shift ; shift ;;
        * ) echo "\n Invalid option use on command line.  Only valid options: [ --debug | --input {inputfile} ]\n Bye!\n" ; exit 1 ;;
    esac
done

if [ -z "${input}" ]
then
    echo -e "\n DEMO RUN ..."
    input=iddnx.csv
    cat >"${input}" <<"EnDoFiNpUt"
uiddn|nIds
uid=uid12345,cn=abc,cn=def,dc=xyx|7_54321
uid=uid6789,cn=abc,cn=def,dc=xyx|5_9876
EnDoFiNpUt
    strAlt="cn=ghk,cn=klm,cn=opu"
fi

if [ -z "${strAlt}" ]
then
    echo -e "\n ERROR - missing option '--strAlt' requires string value to be specified!\n Bye!\n" ; exit 1
fi

output1="removenid.ldif"
output2="groupremoval.ldif"

awk -v dbg=${DBG} -v altStr="${strAlt}" -v f1="${output1}" -v f2="${output2}" 'BEGIN{
    ## Initial loading of the report reference index file into an array for tabulation
    split( "", dataload );
    indexR=0 ;
    if( dbg == 1 ){ printf("\n\t --- %s\n", "PHASE 1" ) | "cat >&2" ; } ;
}
{
    if( $0 != "" ){
        indexR++ ;
        split( $0, datline, "|" );
        if( dbg == 1 ){ printf("\n\t --- %s\n", $0 ) | "cat >&2" ; } ;

        dataload[indexR,1]=datline[1] ;
        if( dbg == 1 ){ printf("\t --- datline[1] = %s\n", datline[1] ) | "cat >&2" ; } ;

        dataload[indexR,2]=datline[2] ;
        if( dbg == 1 ){ printf("\t --- datline[2] = %s\n", datline[2] ) | "cat >&2" ; } ;

        if( indexR == 1 ){
            typeHdr=datline[2] ;
        } ;
    } ;
}
END{
    if( dbg == 1 ){ printf("\n\t --- %s\n", "PHASE 2" ) | "cat >&2" ; } ;
    for( i=2 ; i<=indexR ; i++ ){
        #dn: uid=uid12345,cn=abc,cn=def,dc=xyx
        #changetype: modify
        #delete: nIds
        #nIds: 7_54321
        #-
        printf("dn: %s\nchangetype: modify\ndelete: %s\n%s: %s\n-\n\n", dataload[i,1], typeHdr, typeHdr, dataload[i,2] ) >f1 ;
    } ;

    for( i=2 ; i<=indexR ; i++ ){
        split( dataload[i,1], tmp, "," ) ;
        #dn: cn=ghk,cn=klm,cn=opu,dc=xyx
        #changetype: modify
        #delete: member
        #member: uid=uid12345,cn=abc,cn=def,dc=xyx
        #
        printf("dn: %s,%s\nchangetype: modify\ndelete: member\nmember: %s\n\n", altStr, tmp[4], dataload[i,1] ) >f2 ;
    } ;
}' "${input}" 

echo -e "\nLDIF files generated:"
ls -l "${output1}" "${output2}"

echo -e "\nContents of '${output1}':\n"
cat "${output1}"

echo -e "\nContents of '${output2}':\n"
cat "${output2}"

使用命令行:

script.sh --input iddnx.csv --strAlt "cn=ggg,cn=kkk,cn=ppp"

您将获得以下输出:

LDIF files generated:
-rw-rw-r-- 1 ericthered ericthered 217 Feb  8 16:35 groupremoval.ldif
-rw-rw-r-- 1 ericthered ericthered 172 Feb  8 16:35 removenid.ldif

Contents of 'removenid.ldif':

dn: uid=uid12345,cn=abc,cn=def,dc=xyx
changetype: modify
delete: nIds
nIds: 7_54321
-

dn: uid=uid6789,cn=abc,cn=def,dc=xyx
changetype: modify
delete: nIds
nIds: 5_9876
-

Contents of 'groupremoval.ldif':

dn: cn=ggg,cn=kkk,cn=ppp,dc=xyx
changetype: modify
delete: member
member: uid=uid12345,cn=abc,cn=def,dc=xyx

dn: cn=ggg,cn=kkk,cn=ppp,dc=xyx
changetype: modify
delete: member
member: uid=uid6789,cn=abc,cn=def,dc=xyx

相关问题