我是Perl的新手并试图让它发挥作用。当第1列的内容==> 0并且第2列包含“I”(罗马数字为1)时,我希望打印3个特定列。以下内容返回包含> 0但不包含“I”的所有行。
perl -lane 'print "$F[0]\t$F[1]\t$F[5]" if $F[1] > 0 && $F[0]==/I/' input > output
我做错了什么?我也在努力让它与模式完全匹配,例如我不希望它拉出“II”或“VIII”。
答案 0 :(得分:5)
您需要使用binding operator =~
,而不是==
这是一个数字相等测试,以针对正则表达式模式测试字符串
如果要指定其全部内容,则需要锚定模式的开头和结尾。在Metacharacters
中了解相关信息$F[0]==/I/
应该是
$F[0] =~ /^I$/
或者,更好的是,只使用字符串相等性测试
$F[0] eq 'I'