AWK提取具有特定值的行

时间:2014-10-20 14:57:25

标签: awk sed

我想提取包含特定字段中特定值的行,并且我想使用变量:

这是我的logfile.txt:

    165524401            ftr      996544        HGF57             00007654        9744456666          2014100812204920141008122054

    165524711            sft      776445        HGF865             00007874        66677776          2014100812204920141008122054

    165524700            sft      7765445        HG665             00007874        66677776          2014100812204920141008122054


    165524510            sft      776545        HGhhg65             00007874        66677776          2014100812204920141008122054

    165524711            abc      776445        HGF865             00007874        66677776          2014100812204920141008122054

    165524701            abc      776445        HGF865             00007874        66677776          2014100812204920141008122054

我想在检查这个条件后只提取行

字段1 $ 1以O1或11结束。

字段2 $ 2不等于abc。

字段7以已声明的变量的值

开头

这是我的代码:

var = 20141008

awk -F' *\\| *' 'FNR==NR {  ($1 end with 01 || $1 end with 11) && $2!="abc" && $7 ~ /^ *$var/) ' logFile.txt

1 个答案:

答案 0 :(得分:0)

awk -v var=$var '$1~/[01]1$/ && $2!~/^abc$/ && $7 ~ var' inputfile

将产生输出

165524401            ftr      996544        HGF57             00007654        9744456666          2014100812204920141008122054
165524711            sft      776445        HGF865             00007874        66677776          2014100812204920141008122054

它做什么?

-v var=$var创建变量var并将shell变量$var的值传递给它。

$1~/[01]1$选择以0111

结尾的行

$2!~/^abc$选择包含$2

abc

$7 ~ var检查var中是否存在变量$7模式中的模式

现在,如果您希望$7var中的值开头,则必须将变量初始化为

var='^20141008'