text - 使用 `awk` 在 BEGIN 部​​分打印文件中的行数

标签 text awk text-processing

我正在尝试编写一个 awk 脚本,并且在完成任何操作之前告诉用户文件中有多少行。我知道如何在 END 部分执行此操作,但无法在 BEGIN 部​​分执行此操作。我搜索了 SE 和 Google,但只在 END 部分或作为 bash 脚本的一部分找到了六种方法来执行此操作,而不是在任何处理发生之前如何执行此操作。我希望得到类似以下的内容:

#!/usr/bin/awk -f

BEGIN{
        print "There are a total of " **TOTAL LINES** " lines in this file.\n"
     }
{

        if($0==4587){print "Found record on line number "NR; exit 0;}
}

但一直无法确定如何做到这一点,如果可能的话。谢谢。

最佳答案

您可以读取文件两次:

awk 'NR!=1 && FNR==1 {print NR-1} <some more code here>' file{,}

在你的例子中:

awk 'NR!=1 && FNR==1 {print "There are a total of "NR-1" lines in this file.\n"} $0==4587 {print "Found record on line number "NR; exit 0;}' file{,}

您可以使用 file file 代替 file{,} (它只会让它显示两次)
NR!=1 && FNR==1 这仅在第二个文件的第一行是正确的。


使用 awk 脚本包含:

#!/usr/bin/awk -f
NR!=1 && FNR==1 {
    print "There are a total of "NR-1" lines in this file.\n"
    } 
$0==4587 {
    print "Found record on line number "NR; exit 0
    }

调用:

awk -f myscript file{,}

关于text - 使用 `awk` 在 BEGIN 部​​分打印文件中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29314555/

相关文章:

jquery - 在 Jquery 数据表搜索框中添加提示文本的问题

python - 如何在 Python 中重新格式化时间戳

language-agnostic - 数字是否在所有文本编码中都按顺序表示?

html - 如何根据某个词使标题居中

bash - 如何根据另一个文件的列表值从 csv 文件中删除行?

database - Sentiment140 预处理

r - Create_Matrix 'RTextTools' 包的并行计算

linux - 如何使用 AWK 选择某些列?

bash - 从 40900000 拆分为 409-00-000

python - 从 Pandas 行中删除多个重复出现的文本`