如何从文件不同行提取指定字段并组合输出到另一文件
实现方案
你可以用awk快速完成这个提取需求,Linux/macOS系统默认自带awk,无需额外安装工具。
方法1:处理本地文件
假设你的原始内容保存在input.txt文件中,直接运行以下命令即可输出符合要求的内容到output.txt:
awk 'BEGIN{RS=""; FS="\n"} {for(i=1;i<=NF;i++) {if($i ~ /^givenName:/) gn=$i; if($i ~ /^userPassword::/) pwd=$i} print gn ", " pwd "\n"}' input.txt > output.txt
命令逻辑说明:
RS="":设置输入记录分隔符为空行,这样每两个空行之间的所有内容就会被识别为一个完整的用户条目FS="\n":设置每个记录内部的字段分隔符为换行符,每条属性行就是一个独立字段- 遍历每个字段匹配对应的属性名,存到变量后拼接输出,末尾自动加空行分隔不同用户的记录
方法2:处理实时命令输出
如果你的原始内容是其他命令(比如ldapsearch)的输出,直接把命令输出用管道传给awk即可,示例:
ldapsearch [你的查询参数] | awk 'BEGIN{RS=""; FS="\n"} {for(i=1;i<=NF;i++) {if($i ~ /^givenName:/) gn=$i; if($i ~ /^userPassword::/) pwd=$i} print gn ", " pwd "\n"}' > output.txt
输出验证
运行完成后可以用cat output.txt查看生成的文件,内容和要求的格式完全一致:
givenName: filip, userPassword:: MTIz givenName: stiv, userPassword:: BhJk
内容的提问来源于stack exchange,提问作者Stevi Kinter
相关产品推荐
相关产品推荐

