【问题标题】:awk multiple conditional commandawk 多条件命令
【发布时间】:2012-12-05 19:32:02
【问题描述】:

我正在尝试使用 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

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

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

【问题讨论】:

    标签: unix awk


    【解决方案1】:

    您需要在|| 表达式的第二部分重复$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 ~ "/"'
    

    【讨论】:

    • 甜蜜!谢谢约翰,我的问题的第二部分已经解决了。你知道我可以使用什么命令来获取组合吗?我真的找不到合适的表达方式来告诉 Linux! (请注意,我正在尝试获取没有“condition1 或 cnd1”的组合)
    • 你好约翰,我没有勾选答案,因为我再次检查了数据......按名称命名,我发现了这些问题: 1- 一些条件 1 - 条件 3 由空格分隔有时用 (-)。所以我为这个麻烦找到的唯一解决方案是说(对不起,我要用英语说这个!)“搜索列,排除“^cnd1$”,“^condition1$”(单独)不管大小写和排除任何不包含字符串 "cnd1" 和 condition1 的内容。我认为这将是一个很长的命令,但这是我唯一的出路。谢谢
    【解决方案2】:

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

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

    注意使用单词边界 \&lt;\&gt; 以防止错误匹配“ACND1”和“condition11”等内容

    【讨论】:

    • 感谢条件声明
    • 请注意 IGNORECASE 是特定于 GNU-awk 的。如果您想删除该限制,您可以去掉 BEGIN 部​​分,只需测试 tolower($2)。不确定哪些 awk 支持 \,但不会全部支持,尽管 GNU awk 可以做到,只要你坚持使用 gawk,一切都很好。
    猜你喜欢
    • 2020-09-20
    • 2016-12-06
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多