You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在LDAP LDIF中实现交互式BASH/AWK脚本的技术问询

改造你的AWK脚本为交互式版本(支持STDIN输入)

其实AWK本身就天然支持从标准输入(STDIN)读取内容,你的脚本只需要做一些小调整,就能变成可以等待用户交互式输入的版本,同时还能修复原脚本里的一些小问题。

修改后的完整脚本

#!/usr/bin/awk -f
BEGIN {
    FS = ":";
    # 添加交互提示,告诉用户怎么操作
    print "请输入LDIF格式内容,输入完成后按 Ctrl+D(Linux/macOS)或 Ctrl+Z(Windows)结束输入:"
}
{
    # 去除字段前后的空白字符,避免因为LDIF里的格式差异(比如NAME:Alice无空格、ORGANISATION: Something有空格)导致出错
    gsub(/^[ \t]+|[ \t]+$/, "", $1);
    gsub(/^[ \t]+|[ \t]+$/, "", $2);
    
    if ($1 ~ /^ORGANISATION$/ ) { 
        lm = $2 
    }
    # 合并条件逻辑,同时忽略大小写匹配"UNKNOWN"(修复原脚本匹配不到首字母大写的Unknown的问题)
    if (tolower(lm) ~ /unknown/ && $1 ~ /^NAME$/ ) {
        print "NAME:" $2 " ORGANISATION: " lm;
    }
}
END {
    print "\n输入处理完成!"
}

关键改动说明

  • 添加交互提示:在BEGIN块里增加了提示信息,明确告诉用户输入规则和结束方式,提升交互式体验。
  • 处理空白差异:用gsub清除字段前后的空格、制表符,适配LDIF里有的字段带空格、有的不带的情况,避免匹配或输出出错。
  • 修复匹配问题:原脚本里的/UNKNOWN/正则只能匹配全大写的组织名,而你的示例里是Unknown,所以会匹配失败。我用tolower(lm)把组织名转成小写后再匹配,这样不管大小写都能正确识别。
  • 优化逻辑结构:把嵌套的if合并成更清晰的单一条件,让代码可读性更强。

使用方法

  1. 把脚本保存为interactive_ldif.awk,然后赋予执行权限:
chmod +x interactive_ldif.awk
  1. 直接运行脚本,就会进入交互式输入模式,等待你输入内容:
./interactive_ldif.awk
  1. 你也可以把现有的LDIF文件通过管道传给脚本处理(这也算STDIN输入的一种):
cat your_ldif_file.ldif | ./interactive_ldif.awk

测试效果

用你提供的LDIF内容输入后,脚本会输出:

NAME:Alice ORGANISATION: Unknown

内容的提问来源于stack exchange,提问作者Empe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:29:49