awk中的多个模式匹配

时间:2018-04-02 07:47:05

标签: unix awk

这是我的脚本片段,如果第二列的值是" THWR"则打印文件的记录。我需要添加" RWGW"和" OSPW"进入比赛标准。这是否可以使用awk的匹配功能?

 var daysArray = [];
    for (var i = 0; i < results.length; i++) {
      var dayOb = {
        date: '',
        day: '',
        formattedDate: '',
      };

      var date = results[i].date;

      dayOb.date = moment(date).date();
      dayOb.day = moment(date).format('ddd');
      dayOb.formattedDate = moment(date).format('MM/DD(ddd)');

      daysArray.push(dayOb);
    }

    var weeksArray = [];
    var count = 0;
    for (var i = 0; i < Math.ceil(daysArray.length / 7); i++) {
      var weekOb = {
        week: {
          days: [],
        },
      };
      weeksArray.push(weekOb);
    }

    var nextStart = 0;
    for (var i = 0; i < weeksArray.length; i++) {
      var count = 0;
      for (var j = nextStart; j < daysArray.length; j++) {
        count++;
        if (count < 8) {
          weeksArray[i].week['days'].push(daysArray[j]);
        } else {
          nextStart = j;
          break;
        }
      }
      count = 0;
    }

示例输入:

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 匹配尽可能地做到这一点。

2 个答案:

答案 0 :(得分:1)

请您试试,请告诉我这是否对您有所帮助。您可以使用逗号分隔在名为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

现在也添加非单线形式的解决方案。

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

输出如下。

123,THWR,123
123,RWGW,123
123,OSPW,123

答案 1 :(得分:0)

@ RavinderSingh13的方法是正确且可重复使用的,但有时你只想检查一对(或在这种情况下为三个)候选人的字段值。在这种情况下使用:

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