打印我正在搜索的文件的行号

Dᴀʀ*_*ᴅᴇʀ 9 bash text-processing

我正在寻找一种方法来打印我的脚本正在通过的文件行号。我找到了,$LINENO但是当我这样做时

echo 'Found foo in file' $(basename $foo) 'on line' $LINENO >> foo.csv

它打印结果“在文件的第 97 行的文件 Foo 中找到 foo .csv。我希望它打印它正在查看的文件中的行,而不是它所在的脚本行。我如何回显行号文件?

Jos*_* R. 19

nl在浏览文件之前,您可以使用它们对文件的行进行编号:

$ cat testfile
a
b
c
$ nl -b a testfile
   1 a
   2 b
   3 c
Run Code Online (Sandbox Code Playgroud)

请注意,这-b a是必需的,因为默认情况下,nl不会对空行进行编号。

当然,如果您的文件非常大,这将是低效的,因为它将通过文件两次。

也许更好的选择是使用您自己的行计数器,以便您只需要浏览一次文件:

COUNT=0
while read -r line; do
    COUNT=$(( $COUNT + 1 ))
    if [ ... ];then
        # Do things to the line
        # Make use of COUNT to show line number
    fi
done < your_file_here
Run Code Online (Sandbox Code Playgroud)

这仅在您逐行处理文件时才有效。grep例如,如果您正在使用它,它将不起作用。