使用AWK进行验证

时间:2013-04-09 18:01:36

标签: bash validation unix awk

a=1

echo -n "Enter book id: "; read book_id;
while [ $a -eq 1 ]
do
a=$(awk '{ if($3 == "$book_id") print 1; else print 0}' exercise1_data.txt)
echo $a
if [ $a -eq 1 ]; then
echo -n "Please enter unique book id: "; read book_id
fi
done

我正在尝试检查用户输入的图书ID是否唯一。如果有任何“book_id”实例,我正在检查文件“exercise1_data.txt”。 while循环将被执行,直到用户输入唯一的书籍ID。

我收到错误Too many arguments

1 个答案:

答案 0 :(得分:2)

首先修复awk:

您需要使用awk选项将shell变量传递给-v

awk -v b_id="$book_id" '$3==b_id{print 1;exit}END{print 0}' exercise1_data.txt

如果$3==b_id print 1,您应该exitprint 0匹配。当我们到达文件末尾时找不到$ cat file book_1 orielly 100 book_2 wiley 101 (找不到匹配项)。


其次是剧本:

#!/bin/bash

a=1

while [ "$a" -eq 1 ]; do
    echo -n "Please enter unique book id: "
    read book_id
    let a=$(awk -v b_id="$book_id" '$3==b_id{print 1;exit}END{print 0}' file)
    echo "$a"
done

脚本:

$ bash script.sh
Please enter unique book id: 100
1
Please enter unique book id: 101 
1
Please enter unique book id: 102
0

演示:

{{1}}

注意:

  • 始终引用您的shell变量。

  • 您在书籍文件中使用空格作为字段分隔符,这将不灵活,即书籍标题,作者等都具有空格。