"Is in" GAWK 中的条件
"Is in" condition in GAWK
我正在使用 Linux 终端和 GAWK 执行任务,objective 是提取正则表达式列表并计算与该表达式相关的基因。
我已经能够设置一个 GAWK 表达式来为每个正则表达式执行此操作,但我必须 运行 为列表中的每个表达式设置它。
有没有办法设置这样的条件:If (RegExp is in RegExpList) i++1?
您可以将 RegExpList 声明为数组:
RegExpList["RegExp"] = 1;
然后使用这个语句:
if(c in RegExpList){do something;}
如果c
是RegExp
,则条件为真。
参考gawk manual。
我是这样做的:
gawk 'BEGIN{i=0}
{while ((getline line < "regexpinput.txt") !=FN) RegExpList[line]=1;
if ( in RegExpList) i++1}
END{print i}' tabular_file.txt
感谢@nopasara 的帮助。
很可能这是正确的方法:
awk '
NR==FNR{ re = (NR>1 ? re "|" : "") "(" [=10=] ")"; next }
[=10=] ~ re { cnt++ }
END { print cnt+0 }
' regexpinput.txt tabular_file.txt
但如果你 post MCVE 我们肯定知道。
我正在使用 Linux 终端和 GAWK 执行任务,objective 是提取正则表达式列表并计算与该表达式相关的基因。
我已经能够设置一个 GAWK 表达式来为每个正则表达式执行此操作,但我必须 运行 为列表中的每个表达式设置它。
有没有办法设置这样的条件:If (RegExp is in RegExpList) i++1?
您可以将 RegExpList 声明为数组:
RegExpList["RegExp"] = 1;
然后使用这个语句:
if(c in RegExpList){do something;}
如果c
是RegExp
,则条件为真。
参考gawk manual。
我是这样做的:
gawk 'BEGIN{i=0}
{while ((getline line < "regexpinput.txt") !=FN) RegExpList[line]=1;
if ( in RegExpList) i++1}
END{print i}' tabular_file.txt
感谢@nopasara 的帮助。
很可能这是正确的方法:
awk '
NR==FNR{ re = (NR>1 ? re "|" : "") "(" [=10=] ")"; next }
[=10=] ~ re { cnt++ }
END { print cnt+0 }
' regexpinput.txt tabular_file.txt
但如果你 post MCVE 我们肯定知道。