我必须编写一个脚本,它会获得一个文本文件,其中包含9行和9行号(1-9)。 例如:
123456789
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678
我必须根据数独规则检查行和行。 在一行或一行中不能是相同的数字。 所以这个例子是一个正确的解决方案。
如何用bash shell脚本编写它? 我不能使用数组,所以我该怎么办?
答案 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