2016-02-29 93 views
0

我有一个键是一个字符串key="Value1"查找条目使用密钥索引在UNIX

然后我有,我想用钥匙来搜索FILE.CSV。使用密钥我想查找csv文件中的行条目,然后在标识的行中找到“Value2”的列位置。

我试着使用:

$ awk 's=index($0,$key) { print "line=" NR }' file.csv 

但是,这似乎并没有工作,因为它基本上确定所有行:P

我想可能grep的工作,但不知道如何有效地实现它

输入:FILE.CSV

Value, Object, Position, Value! 
Value1, Object1, Position, Value2 

所需的输出:

row 2 col 4 

其中列号存储为变量x,其中例如, X = 4

+2

请给出一些示例输入和所需的输出。 – Sobrique

+0

我试过awk,但关键似乎没有有效地确定正确的索引位置。 – RK1

+0

所以你想产生的输出,但也存储一个部分作为壳变量? –

回答

1

如果我理解正确的话,我认为你可以使用这样的事情:

awk -F', *' -v key="Value1" -v value="Value2" '$1 == key { 
    for (i = 2; i <= NF; ++i) if ($i == value) { print i; exit } }' file 

这通过两个值的awk脚本:关键,这是用来确定正确的行以及要搜索的值。当第一个字段与键匹配时,循环会遍历剩余的字段并输出与该值匹配的第一个字段。当找到一个时,脚本退出。

要将该值赋给shell变量x,请使用x=$(awk ...)

+0

看起来不错,虽然我认为OP要'打印'行',NR,“col”,我在那里 –

+0

@Jeff是的,我不确定是否最好提供OP计划直接在这里使用的编号或打印输出,如你所建议的,但后来必须解析它。“期望的输出”似乎更像是一个调试步骤对我来说 –

+0

非常感谢,似乎工作:) – RK1