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=
,如果不止一个。
我有一个如下所示的输入文件:
"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=
,如果不止一个。