Unix awk匹配中的多模式

Unix awk匹配中的多模式,unix,awk,Unix,Awk,这是我的脚本的一个片段,如果第二列的值为“THWR”,它将打印文件的记录。我需要将“RWGW”和“OSPW”添加到匹配标准中。awk的匹配功能是否可以实现这一点 awk -v FPAT='([^,]*)|("[^"]*")' 'NR==1; NR>1 && match($2,"THWR") 输入样本: col1,col2,col3 123,THWR,123 123,RWGW,123 123,OSPW,123 123,POOL,123 123,TYTY,123 期望输出:

这是我的脚本的一个片段,如果第二列的值为“THWR”,它将打印文件的记录。我需要将“RWGW”和“OSPW”添加到匹配标准中。awk的匹配功能是否可以实现这一点

awk -v FPAT='([^,]*)|("[^"]*")' 'NR==1; NR>1 && match($2,"THWR")
输入样本:

col1,col2,col3
123,THWR,123
123,RWGW,123
123,OSPW,123
123,POOL,123
123,TYTY,123
期望输出:

col1,col2,col3
123,THWR,123
123,RWGW,123
123,OSPW,123

我希望通过
awk
match尽可能做到这一点

请您尝试以下内容,并让我知道这是否对您有帮助。在名为
var
的变量中,可以用逗号分隔n个字符串

awk -F, -v var="THWR,RWGW,OSPW" 'BEGIN{num=split(var, array,",");for(i=1;i<=num;i++){array1[array[i]]}} $2 in array1'  Input_file

@RavinderSingh13的方法是正确的,并且是可重用的,但有时您只想检查几个(在本例中是三个)候选项的字段值。在这种情况下,请使用:

$ awk -F, 'NR==1 || $2 ~ /^(THWR|RWGW|OSPW)$/' file
col1,col2,col3
123,THWR,123
123,RWGW,123
123,OSPW,123

请将示例输入和示例输出添加到您的post in代码标签中,并让我知道相同的then.hi ravi。编辑了我的帖子。您好,您需要的输出没有任何意义。请更清楚地回答您的问题,并让我们知道更多详细信息。您好。对不起,我尽可能地简单了。基本上,输出应该是第二列带有“THWR”、“RWGW”和“OSPW”值的行。好的,现在了解您的要求,请检查我的解决方案,并让我知道这是否有帮助。可以。你能解释一下你的解决办法吗?感谢you@user2058738,因为您没有提供任何示例,所以我没有对其进行测试,请添加适当的示例,然后我将为您重新编写命令。@user2058738,请检查我编辑的代码,并告诉我这是否对您有帮助?我已尝试使用此命令获得正确的输出。谢谢你,拉维
123,THWR,123
123,RWGW,123
123,OSPW,123
$ awk -F, 'NR==1 || $2 ~ /^(THWR|RWGW|OSPW)$/' file
col1,col2,col3
123,THWR,123
123,RWGW,123
123,OSPW,123