【问题标题】:Unix: Print file name and line number of each line that exceeds 80 characters of each file in a folderUnix:打印文件夹中每个文件超过80个字符的每行的文件名和行号
【发布时间】:2011-03-23 16:39:51
【问题描述】:

标题总结了它。我在 Unix,korn shell 中工作。我正在尝试打印当前文件夹中每个文件超过 80 个字符的每一行的文件名和行号。

我可以使用 "awk 'length > 80' *.cpp" 给出所有超过 80 个字符的行,但我似乎无法提取行号或文件名。我也尝试使用 cat ,因为它允许使用行号。

这个想法是得到类似这样的输出:

test.cpp line 36
    std::cout << ... line that is over 80 characters

test2.cpp line 40
    Another line that is over 80 characters

任何帮助都会很棒。

【问题讨论】:

    标签: shell unix scripting


    【解决方案1】:

    快到了!这将为您提供grep 样式的输出,在 Vim 等编辑器中非常有用,以便能够导航输出:

    awk 'length > 80 {print FILENAME "(" FNR "): " $0}' *.cpp
    

    或者给出你要求的格式:

    awk 'length > 80 {print FILENAME " line " FNR "\n\t" $0}' *.cpp
    

    FILENAMEFNR(类似于 NR,但针对该特定文件)是 awk 中的特殊变量。

    当然,您也可以使用grep 本身:

    grep -n '^.\{80\}' *.cpp
    

    【讨论】:

    • 谢谢!这几乎是完美的;有什么方法可以让行号正确吗?我认为打印的行号对应于所有文件的组合文本,而不是单个文件本身。
    • @Carlin:很有趣。我建议使用grep
    • @Carlin:我现在也修复了awk 解决方案。
    【解决方案2】:
    awk 'length > 80 { print FILENAME ":" NR ": " $0 }' *.cpp
    

    【讨论】:

    • 谢谢!这几乎是完美的;有什么方法可以让行号正确吗?我认为打印的行号对应于所有文件的组合文本,而不是单个文件本身。
    • @Carlin:是的。在我的回答中使用FNR 而不是NR
    猜你喜欢
    • 2018-07-22
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    相关资源
    最近更新 更多