Unix (ksh) 脚本,用于读取文件、解析和仅输出某些列

Unix (ksh) script to read file, parse and output certain columns only

我有一个如下所示的输入文件:

"LEVEL1","cn=APP_GROUP_ABC,ou=dept,dc=net","uid=A123456,ou=person,dc=net"
"LEVEL1","cn=APP_GROUP_DEF,ou=dept,dc=net","uid=A123456,ou=person,dc=net"
"LEVEL1","cn=APP_GROUP_ABC,ou=dept,dc=net","uid=A567890,ou=person,dc=net"

我想读取每一行,解析然后像这样输出:

A123456,ABC
A123456,DEF
A567890,ABC

换句话说,从 "uid=" 中检索用户 ID,然后从 "cn=APP_GROUP_" 中检索标识符。对每个输入记录重复,写入新的输出文件。

请注意,列位置不固定,因此不能依赖位置,我想我必须搜索 "uid=" 字符串并以某种方式使用该位置?

非常感谢任何帮助。

可以用awk分列,按','分列,再按=分列,抓取结果。您可以轻松做到 awk -F, '{ print }' | awk -F= '{print }'

查看您提供的示例的这一行:

cat file  | awk -F, '{ print }' | awk -F= '{print }'
A123456
A123456
A567890

您可以使用 sed 轻松做到这一点:

sed 's/.*cn=APP_GROUP_\([^,]*\).*uid=\([^,]*\).*/,/'

正则表达式捕获两个所需的字符串,并以相反的顺序输出它们,它们之间有一个逗号。您可能需要根据数据的精确性质更改捕获的上下文,因为 uid= 将匹配行中的 last uid=,如果不止一个。