Bash shell脚本检查器

时间:2015-11-10 21:13:33

标签: arrays bash shell

我必须编写一个脚本,它会获得一个文本文件,其中包含9行和9行号(1-9)。 例如:

  

123456789

     

234567891

     

345678912

     

456789123

     

567891234

     

678912345

     

789123456

     

891234567

     

912345678

我必须根据数独规则检查行和行。 在一行或一行中不能是相同的数字。 所以这个例子是一个正确的解决方案。

如何用bash shell脚本编写它? 我不能使用数组,所以我该怎么办?

1 个答案:

答案 0 :(得分:0)

没有awk的解决方案,结合了不同的其他工具。
编辑:此解决方案适用于称为输入的输入文件和数字之间的空格。请参阅有关更改此行为的说明。

echo "Checking 9 lines"
if [ $(wc -l <input ) -ne 9 ]; then
        echo "Wrong number of lines"
        exit 1
fi
echo "Check for correct layout"
if [ $(grep -cv '^[1-9] [1-9] [1-9] [1-9] [1-9] [1-9] [1-9] [1-9] [1-9]$' input ) -ne 0 ]; then
   echo "Not all lines are correct, maybe spaces at the end of a line?"
   grep -v '^[1-9] [1-9] [1-9] [1-9] [1-9] [1-9] [1-9] [1-9] [1-9]$' input
   exit 1
fi
i=0
while read -r line; do
   ((i++))
   if [ $(echo "${line}" | tr " " "\n" | sort -u | wc -l ) -ne 9 ]; then
      echo "Wrong nr of unique numbers in row $i"
   fi
done <input
for j in {1..9}; do
   if [ $(cut -d" " -f${j} input | sort -u | wc -l ) -ne 9 ]; then
      echo "Wrong nr of unique numbers in column $j"
   fi
done