如何使用awk在每行不同的列中剪切string =“”

时间:2014-07-03 13:03:49

标签: bash awk cut

所以我有1000行,如下所示:

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会比削减更好,但是还没有找到最好的方法来获取这些信息。

由于

4 个答案:

答案 0 :(得分:1)

似乎grep会这样做:

grep -o 'C="[0-9]*"' file

输出:

C="20"
C="20"
C="20"
C="10"

答案 1 :(得分:0)

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"

答案 2 :(得分:0)

仅缺少sed实现。这是:

sed -n 's/.*C="*\([0-9]*\)".*/\1/p' file

只返回Xs

答案 3 :(得分:0)

这是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

这会收集所有字母/值对,将值作为实际整数(不带引号)存储在由字母键入的关联数组中。这允许您以任何方式打印出来。例如,无论原始顺序如何,您都可以按字母顺序打印它们(尽管忘记了原始顺序)。