如何比较2个文件并打印字符串的第一个匹配项直到空行

问题描述 投票:0回答:1

我需要对已删除的所有用户进行备份,因此我有 1 个文件用于备份,另一个文件用于要备份的用户列表。我希望它使用 awk 来检索详细信息,并且希望在 awk 内部执行此操作,而不需要 while 条件。

注意:我们正在 Linux 环境下工作。

第一个文件

dn: uid=testuser1,ou=people,ou=identities
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person

dn: uid=testuser1,ou=people,ou=identities
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person

第二个文件

dn: uid=testuser1,ou=people,ou=identities

我用过下面的但是太慢了

while read line
do
delcommand=" awk '/"$line"/,/pattern|^$/' backup.ldif >> backupfiledeleted.txt
eval "$delcommand"
done < listtodelete.txt

预计为用户打印一组详细信息:

dn: uid=testuser1,ou=people,ou=identities
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
awk
1个回答
0
投票

在读取备份文件时,您可以创建一个空行,即

"\n\n"
,作为记录分隔符,并使用换行符作为字段分隔符,这样您就可以轻松输出空行分隔的记录,而无需
while
循环:

NR == FNR {
    a[$0]
    next
}
FNR == 1 {
    RS = "\n\n"
    FS = "\n"
}
$1 in a

用途:

awk -f program.awk backupfiledeleted.txt backup.ldif
© www.soinside.com 2019 - 2024. All rights reserved.