检查一行上的重复值

时间:2015-11-15 12:47:44

标签: bash shell unix awk sed

所以我正在创建一个脚本来检查数独是否正确。 任务是检查行和列中的重复数字,现在对于列,使用具有sort和uniq的awk可以非常轻松地完成作业。但要检查线条是另一回事。由于我不能使用排序等等,请记住我的sed知识几乎没有。 输入:

5 3 4 6 7 8 9 1 2
6 7 2 1 9 5 3 4 8
1 3 8 3 4 2 5 6 7
8 5 9 7 6 1 4 2 3
4 2 6 8 5 3 7 9 1
7 1 3 9 2 4 8 5 6
9 6 1 1 3 7 2 8 4
2 8 7 4 1 9 6 3 5
3 4 5 2 8 6 1 7 8

现在在某些行上有重复的数字,我希望输出能说出类似

的内容
line 1 : good
line 2 : good
line 3 : bad
line 4 : good
line 5 : good
line 6 : good
line 7 : bad
line 8 : good
line 9 : bad

1 个答案:

答案 0 :(得分:0)

假设您已使用awk检查列,并且每列只有1到9的数字,您也可以使用awk进行检查,如下所示:< / p>

{ delete arr;
  okline = 1;
  for (i = 1; i <= NF; ++i) {
    if (arr[$i] == 1) {
      okline = 0;
      break;
    }
    arr[$i] = 1;
  }

  if (okline == 1)
  {
    print "Line: OK";
  }
  else
  {
    print "Line: error";
  }
}

它不计算线条,但你可以理解。