切出一个字符串=“”在不同的列所以我行1000它看起来象下面这样:如何用awk每行
A="10" B="20" C="20" A="10" B="20" C="20" A="10" C="20" D="20" C="10" D="20" A="20"
我要使出浑身C = “X”,也可能需要在某个时刻找到A =“X”。以上是一个缩短的例子,但它可能很容易几十列,它是遍布各地。
我认为awk会比cut更好,但还没有完全想出拉出这些信息的最佳方式。
感谢
切出一个字符串=“”在不同的列所以我行1000它看起来象下面这样:如何用awk每行
A="10" B="20" C="20" A="10" B="20" C="20" A="10" C="20" D="20" C="10" D="20" A="20"
我要使出浑身C = “X”,也可能需要在某个时刻找到A =“X”。以上是一个缩短的例子,但它可能很容易几十列,它是遍布各地。
我认为awk会比cut更好,但还没有完全想出拉出这些信息的最佳方式。
感谢
awk '{s="";for (i=1;i<=NF;i++)if($i~/^(A=|C=)\"/)s=s?s FS $i:$i; print s}' file
A="10" C="20"
A="10" C="20"
A="10" C="20"
C="10" A="20"
我刚试过,效果很好。我对如何提取这种类型的数据有了更好的理解! – HungryFerret
好像grep
会做:
grep -o 'C="[0-9]*"' file
输出:
C="20"
C="20"
C="20"
C="10"
你只是想起了我,我甚至没有想到那条路。 – HungryFerret
下面是另一个awk
可能性。
awk '{
delete a
for(i=1; i<=NF; ++i)
a[substr($i, 1, 1)] = int(substr($i, 4))
print a["A"], a["C"]
}' file
这收集所有的信/值对,在由字母键的关联数组存储值作为实际的整数(没有引号)。这可以让你以任何你想要的方式打印出来。例如,无论原始订单如何(尽管原始订单被遗忘),都可以按字母顺序打印。
对于'C =“X”'示例,输出应该是什么样子? – ooga
你能解释为什么你认为'awk'比'cut'更好吗?你是否也在寻找其他的选择?你能证明你到目前为止所尝试过的吗?你是否至少试图熟悉'awk'甚至是'cut'? – hek2mgl
我会好的C =“X”或只是“X”。 – HungryFerret