1

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

このコマンドは、すべての組み合わせを削除します。

このための適切なコマンドを作成するにはどうすればよいですか?

4

2 に答える 2

3

$2 ~式の 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 ~ "/"'
于 2012-12-18T15:00:19.010 に答える
1

ファイルに書き込む場合は、1 つのパスで行うことができます。

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

単語境界の使用に注意し、「ACND1」や「condition11」などの誤った一致を防止します\<\>

于 2012-12-18T15:26:59.717 に答える