【发布时间】:2021-08-28 00:37:50
【问题描述】:
我正在编写一个 bash 脚本来处理各种 LDAP 查询到管道分隔的文件中。某些结果记录不包括所有属性,并且每条记录的数据不会以每条记录的相同属性顺序返回。我编写了脚本以确保所有记录都具有 4 个必要的属性,现在我正在尝试使用 awk 对输出记录的字段重新排序,以使其全部匹配已建立的顺序。下面是我希望处理的一组示例记录,其中第一条记录代表所需的订单/列头。
cn: User ID
displayName: Display Name
LastLoginTime: Last Login
ExpirationDate: Exp Date
cn: mf_mdsa
displayName: NONE
ExpirationDate: 00000000000000
LastLoginTime: 20201220212738
displayName: NONE
cn: mf_cs
ExpirationDate: 00000000000000
LastLoginTime: 20201220212704
displayName: NONE
ExpirationDate: 00000000000000
LastLoginTime: 20181009205555
cn: OPERATOR
ExpirationDate: 00000000000000
displayName: HENNIE VAN DEVENTER
LastLoginTime: 20181030201447
cn: hvdevent
cn: A0S
displayName: LARA EVERWINE
ExpirationDate: 20190612001951
LastLoginTime: 20190313182136
cn: SODS822
ExpirationDate: 00000000000000
displayName: JAMES SIMS
LastLoginTime: 20210104000757
我正在如下调用一个 awk 脚本并输出到一个文件中
BEGIN {FS=": "; OFS="|"}
$1 == "cn" {cn = $2}
$1 == "displayName" {displayName = $2}
$1 == "LastLoginTime" {LastLoginTime = $2}
$1 == "ExpirationDate" {
print cn,displayName,LastLoginTime,$2}
虽然似乎正在发生所需的重新排序,但一条记录中的字段值正在渗透到下一条记录中。我想这与如何将字段标签和值添加到变量中以提供打印有关,但我无法弄清楚如何在移动到下一个记录之前正确处理每条记录
User ID|Display Name|Last Login|Exp Date
mf_mdsa|NONE|Last Login|00000000000000
mf_cs|NONE|20201220212738|00000000000000
mf_cs|NONE|20201220212704|00000000000000
OPERATOR|NONE|20181009205555|00000000000000
A0S|LARA EVERWINE|20181030201447|20190612001951
SODS822|LARA EVERWINE|20190313182136|00000000000000
SODS822|JAMES SIMS|20190313182136|00000000000000
【问题讨论】:
-
您的示例输出与您的示例输入不匹配...
标签: awk