Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash awk不打印行号_Bash_Shell_Awk - Fatal编程技术网

Bash awk不打印行号

Bash awk不打印行号,bash,shell,awk,Bash,Shell,Awk,我有以下代码 awk -v bookName="$bookName" -v authorName="$authorName" '/bookName:authorName/{print NR}' BookDB.txt My bookDB.txt包含语法如下所示的文本: 书名:作者姓名:价格 上面的代码旨在精确匹配“bookname:authorname”,并打印出匹配的行号。然而,它并没有打印出任何内容 我没有发现代码语法有任何错误。 任何帮助都将不胜感激。问题是您试图在/中使用awk变量,但您

我有以下代码

awk -v bookName="$bookName" -v authorName="$authorName" '/bookName:authorName/{print NR}' BookDB.txt
My bookDB.txt包含语法如下所示的文本:

书名:作者姓名:价格

上面的代码旨在精确匹配“bookname:authorname”,并打印出匹配的行号。然而,它并没有打印出任何内容

我没有发现代码语法有任何错误。
任何帮助都将不胜感激。

问题是您试图在
/
中使用awk变量,但您不能这样做

将您的条件更改为
$0~bookName:“authorName
,以在整个记录
$0
中搜索模式

或者,如果文件中的字段由
分隔,也可以使用
-F:
设置输入字段分隔符,然后对前两个字段使用字符串比较:

awk -F: -v book="$bookName" -v author="$authorName" '
    $1 == book && $2 == author{print NR}' BookDB.txt

问题是您试图在
/
中使用awk变量,但您无法做到这一点

将您的条件更改为
$0~bookName:“authorName
,以在整个记录
$0
中搜索模式

或者,如果文件中的字段由
分隔,也可以使用
-F:
设置输入字段分隔符,然后对前两个字段使用字符串比较:

awk -F: -v book="$bookName" -v author="$authorName" '
    $1 == book && $2 == author{print NR}' BookDB.txt