gpt4 book ai didi

linux - awk 和复杂 find 的输出错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:51:32 25 4
gpt4 key购买 nike

我有一个来自 LDAP 数据库的数据转储,我正在尝试提取一些关键字段。

awk '/mail:|uid:|generationQualifier:|initials:|givenName:|fullName:|messageServer:|telephoneNumber:|facsimileTelephoneNumber:/{s=s", "$0} /description:/ {s=s", "$0 "\n" ;} END{printf substr(s,3)}' dump2.txt >> mainDump2.csv

我能够恢复所有数据,但输出不会添加\n“始终”。在大多数情况下,它确实如此,但在诸如以下的行上:

sASLoginSecret:: ngAAgAHkAbwB1vAG0AIABoAGkAZwBoACAAcwBjAGgAbwBvAGwAPwCwAAA
AabodpVFjlT1Hf8fQRXNPMvaHPPxCFuysBdTMQ9SX+ycAWnCQydlkBP+eo6VrspaTnOxk0rBf
MMI5x+F+TwogburQi3mphOY8ueffckjBDMgDFN2GlXCmLb1BQIVLFZz2HDUadB7JNl3OpfvRd7i0U
t4xMQ=
mail: kletcher@land.edu
uid: kfletcher
givenName: Kat
fullName: Kat letcher
Language: English
messageServer: cn=IIS5,ou=LAND,o=landCollege
title: Executive Director of Institutional Advancement
telephoneNumber: 432-555-4519
sn: Fletcher
securityEquals: cn=AllNWUsers-Group,ou=GROUPS,ou=LAND,o=landCollege
securityEquals: cn=MC-FacStaff-Group,ou=GROUPS,ou=LAND,o=landCollege
securityEquals: cn=MC-FullTimers-Group,ou=GROUPS,ou=LAND,o=landCollege
securityEquals: cn=InstAdvFolder-Group,ou=IA,ou=LAND,o=landCollege
passwordUniqueRequired: TRUE
passwordRequired: TRUE
passwordMinimumLength: 8
passwordExpirationTime: 20141130124749Z
passwordExpirationInterval: 15552000
passwordAllowChange: TRUE
ou: Institutional Advancement & MC Foundation
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: Person
objectClass: ndsLoginProperties
objectClass: Top
eMailAddress: 7#kfletcher@land.edu
loginTime: 20140911135740Z
loginMaximumSimultaneous: 2
loginIntruderAddress:: MSMKBwcB
loginGraceRemaining: 6
loginGraceLimit: 6
l: PAD 143
ndsHomeDirectory: cn=NWCL1_FACHOME,ou=LAND,o=landCollege#0#home\kfletche
r
groupMembership: cn=AllNWUsers-Group,ou=GROUPS,ou=LAND,o=landCollege

它的输出如下:

https://bpaste.net/show/cd743ee697d3

那是因为有些人没有传真号码,因此字符串匹配永远不会发生,并且不会添加新行。 “但是”,每个人都有一个电子邮件地址,但我无法弄清楚如何让它在 mail: 前面添加新行,然后打印该行。

我如何编辑 awk 来输出,例如

\n mail: ...

最佳答案

再次更新

您肯定没有将上述代码用于 20GB 文件吗?无论需要多长时间 - 您每次都会向单个变量添加一行,并且只在最后输出它 - 当一个字符串可能达到几百 MB 或更多时......

到底为什么不在每一行完成后立即输出,然后开始构建下一行呢?类似这样的内容,但为了清楚起见,省略了一些字段:

awk '/uid:|givenName:|fullName:|description:/{
if(length(s)>0)s=s", " # add comma separator if s already has anything in it
s=s $0 # append this line to s
}
/^mail:/{
if(length(s)>0)printf "\n%s",s # if s has anything in it, output new line and s
s=$0 # start building up s afresh with email address
}
END{print s}' file

已更新

不,我的意思是,如果你有一个名为 MAIL 的字符串,并且你想在它之前打印一个新行,你可以这样做:

MAIL="Hello I am some mail";   printf "\n%s",MAIL;

原始答案

我认为你的意思是:

awk 'BEGIN{printf "\nstring:%s\nnumber:%d\n","string",42}'

string:string
number:42

关于linux - awk 和复杂 find 的输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26175711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com