我正在尝试用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
此命令正在消除所有组合。
如何为此形成正确的命令?
答案 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”之类的错误匹配