【发布时间】:2021-05-10 15:43:02
【问题描述】:
我正在处理一个输入文件,该文件包含一个新行上的用户 ID 列表。在 bash 脚本中,我在该输入文件上运行一个 while 循环,使用 grep -E 执行 ldapsearch 查询来过滤我想要的结果。生成的输出文件目前格式如下(/mountpoint/out_file_1.out);
uid=user_id1,cn=Users,ou=Department,dc=myORG
LDAPresource=myORG_RESname1 LDAPresource=myORG_RESname2
uid=user_id2,cn=Users,ou=Department,dc=myORG
LDAPresource=myORG_RESname2 LDAPresource=myORG_RESname3
然而,所需的输出应该如下所示;
user_id1;myORG_RESname1
user_id1;myORG_RESname2
user_id2;myORG_RESname2
user_id2;myORG_RESname3
到目前为止,我已经尝试使用 grep 和 cut 来实现上述所需的输出。这是我在上面的第一个结果文件上运行的确切命令:
grep -E '(^uid=|myORG_RESname1|myORG_RESname2|myORG_RESname3)' /mountpoint/out_file_1.out | cut -d, -f1 >&5
导致第二个输出 (/mountpoint/out_file_2.out);
uid=user_id1
LDAPresource=myORG_RESname1
LDAPresource=myORG_RESname2
再次,用 cut 运行另一个 grep:
grep -E 'LDAPresource|uid=' /mountpoint/out_file_2.out | cut -d= -f2 >&6
最终产生这个输出(/mountpoint/out_file_3.out):
user_id1
myORG_RESname1
myORG_RESname2
这“几乎”是我所需要的。我生成的最后一个输出需要去掉换行符并为每个已找到的资源名称重复用户 ID,如已针对所需输出 (/mountpoint/final_output.out) 描述的那样:
user_id1;myORG_RESname1
user_id1;myORG_RESname2
使用:
tr '\n' ';' < input_file > output_file 没有给我想要的结果...
任何想法如何实现这一目标?非常感谢任何帮助。
编辑:
这是我正在运行的实际 bash 脚本以供参考:
#!/bin/bash
# assign file descriptor for input fd
exec 3< /mountpoint/userlist
# assign file descriptor for output fd unfiltered
exec 4> /mountpoint/out_file_1.out
# assign file descriptor for output fd filtered
exec 5> /mountpoint/out_file_2.out
# assign file descriptor for output fd final
exec 6> /mountpoint/out_file_3.out
while IFS= read -ru 3 LINE; do
ldapsearch -h IPADDR -D "uid=admin,cn=Users,ou=Department,dc=myDC" -w somepwd "(uid=$LINE)" LDAPresource >&4
grep -E '(^uid=|Resource1|Resource2|Resource3)' /mountpoint/out_file_1.out | cut -d, -f1 >&5
grep -E 'TAMresource|uid=' /mountpoint/out_file_2.out | cut -d= -f2 >&6
#tr '\n' ';' < input_filename > file
done
# close fd #3 inputfile
exec 3<&-
# close fd #4 & 5 outputfiles
exec 4>&-
exec 5>&-
# exit with 0 success status
exit 0
【问题讨论】:
-
示例输入和输出很有帮助,但它们本身让我们猜测您想要执行的转换的实际规范。
-
将
/mountpoint/out_file_1.out和您想要的输出示例输入到您的问题(无评论)。