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

请求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

工作原理

  1. 分割规则设置:RS=""让AWK把空行分隔的内容识别为单个用户的信息块,FS="\n"把块内的每行拆成独立字段,方便逐个处理。
  2. 键值对存储:遍历每个字段,用split拆分出uid/gid/homedirectory的键和对应值,存入数组后,不管原字段顺序如何,都能通过键名精准取值。
  3. 格式化输出:用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:55:18