2015-04-01 58 views
0

我有一个输入文件看起来像这样:UNIX(KSH)脚本读取文件,分析和输出某些列仅

"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 =”中检索用户标识,然后从“cn = APP_GROUP_”中检索标识。对每个输入记录重复写入新的输出文件。

请注意,列位置不固定,所以不能依靠位置,猜测我必须搜索“uid =”字符串,并以某种方式使用位置可能?

任何帮助非常赞赏。

+1

你试过了什么?这不是一个代码写入服务。 – NathanOliver 2015-04-01 14:34:13

+0

NathanOliver,我不是要求写代码,我在哪里要求?只是一个指向我所寻找的命令或语法的指针,然后去做更多的研究并自己编写代码。感谢您的建设性帮助。 – infaddict 2015-04-01 14:57:26

回答

0

您可以使用awk分割列,按','拆分,然后按=拆分,并获取结果。你可以这样做很容易为awk -F, '{ print $5}' | awk -F= '{print $2}'

看看这条线看着你提供的例子:

cat file | awk -F, '{ print $5}' | awk -F= '{print $2}' 
A123456 
A123456 
A567890 
+0

非常感谢Breno Leitao,这看起来正是我所追求的。我将测试一些示例代码。 – infaddict 2015-04-01 14:58:04

+0

很酷。你能否把我的问题标记为正确,然后,请吗? – 2015-04-01 17:08:02

1

你可以用sed做到这一点很容易:

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

正则表达式捕获两个期望的字符串,并以相反的顺序输出它们之间的逗号。您可能需要更改捕获的上下文,具体取决于数据的确切性质,因为uid=将匹配行中的上一个uid=(如果有多个)。