您可以使用单个awk
命令执行此操作,如下所示:
pax> cat 1.config
[Location]
state=California
city=Palo Alto
[Outlet]
id=23
manager=John Doe
pax> cat 2.config
[Location]
state=Western Australia
city=Perth
[Outlet]
id=24
manager=Pax Diablo
pax> awk '
/^city=/ {gsub (/^city=/, "", $0); city=$0}
/^manager=/{gsub(/^manager=/, "", $0); print $0 "," city}
' *.config
John Doe,Palo Alto
Pax Diablo,Perth
请注意,这假定城市在经理之前,并且所有文件都有城市和经理。如果这些假设不正确,awk
脚本会变得更复杂一些,但它仍然可行。
在这种情况下,它会变成这样:
awk '
FNR==1 {city = ""; mgr = ""}
/^city=/ {gsub (/^city=/, "", $0); city = $0}
/^manager=/ {gsub (/^manager=/, "", $0); mgr = $0}
{if (city!="" && mgr!=""){
print mgr "," city; city = ""; mgr = "";
}}
' *.config
这样做是为了使订单无关紧要。它在每个文件的开头将 city 和 manager 变量重置为空字符串,并将它们存储在找到相关行的情况下。在每一行之后,如果两者都设置了,它会打印并清除它们。