请求awk技术支持:过滤文件并整理为指定格式
用AWK整理乱序的用户信息
解决命令
可以直接用这条AWK命令处理目标文件,不管字段顺序如何,都能输出uid;gid;homedirectory格式的结果:
awk 'BEGIN { RS=""; FS="\n"; OFS=";" } { delete arr; for(i=1;i<=NF;i++){split($i,kv,"=");arr[kv[1]]=kv[2]} print arr["uid"],arr["gid"],arr["homedirectory"] }' 你的输入文件名.txt
如果需要复用,可创建format_users.awk脚本文件,内容如下:
BEGIN { RS = "" # 把空行作为单个用户信息块的分隔符 FS = "\n" # 把每行拆成独立字段 OFS = ";" # 输出字段用分号分隔 } { delete arr # 清空数组,避免残留上一个用户的信息 for (i = 1; i <= NF; i++) { split($i, kv, "=") # 按等号拆分每行的键和值 arr[kv[1]] = kv[2] # 把键值对存入数组 } # 按指定顺序输出字段 print arr["uid"], arr["gid"], arr["homedirectory"] }
运行脚本的命令:
awk -f format_users.awk 你的输入文件名.txt
工作原理
- 分割规则设置:
RS=""让AWK把空行分隔的内容识别为单个用户的信息块,FS="\n"把块内的每行拆成独立字段,方便逐个处理。 - 键值对存储:遍历每个字段,用
split拆分出uid/gid/homedirectory的键和对应值,存入数组后,不管原字段顺序如何,都能通过键名精准取值。 - 格式化输出:用
OFS=";"指定输出分隔符,最后按要求顺序输出三个字段的值。
示例验证
输入文件内容:
uid=userA gid=1000 homedirectory=/home/userA uid=userB homedirectory=/home/userB gid=1000
运行命令后输出:
userA;1000;/home/userA userB;1000;/home/userB
内容的提问来源于stack exchange,提问作者bigghost
相关产品推荐
相关产品推荐

