awk多条件命令

时间:2012-12-18 14:55:34

标签: unix awk

我正在尝试用awk选择一些字符串,但我没有得到我想要的

我拥有的数据位于此列

name1    condition1
name2    condition2/condition1
name3    CONDITION3
name4    condition1/condition4
name5    CND1
name6    condition6
name7    cnd1
name8    condition3/cnd1
name9    CND1/condition2

我试图选择condition1和cnd1,无论其位置和字母大小如何。

我希望输出像(condition1和cnd1与任何东西组合)

name2    condition2/condition1
name4    condition1/condition4
name8    condition3/cnd1
name9    CND1/condition2

和另一个输出看起来像(condition1和cnd1 ALONE)

name1    condition1
name5    CND1
name7    cnd1

我正在使用此命令

awk 'BEGIN{IGNORECASE=1} $2 ~ /^cnd1$/ || /^condition1$/'  directory/file.tab

此命令正在消除所有组合。

如何为此形成正确的命令?

2 个答案:

答案 0 :(得分:3)

您需要在$2 ~表达式的第二部分重复||

awk 'BEGIN{IGNORECASE=1} $2 ~ /^cnd1$/ || $2 ~ /^condition1$/'

或使用正则表达式|运算符:

awk 'BEGIN{IGNORECASE=1} $2 ~ /^(cnd|condition)1$/'

对于第一种情况,condition1和cnd1与任何东西组合,试试这个:

awk 'BEGIN{IGNORECASE=1} $2 ~ /(cnd|condition)1/ && $2 ~ "/"'

答案 1 :(得分:1)

如果您正在写文件,可以一次性完成:

awk '
    BEGIN {IGNORECASE=1} 
    $2 ~ /\<(cnd|condition)1\>/ {
        if ($2 ~ /\//)
            print > combined_cnd1
        else
            print > only_cnd1
    }
'

请注意使用字边界\<\>来防止“ACND1”和“condition11”之类的错误匹配