2011-03-23 78 views
8

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

我可以用“的awk‘长度> 80’*的.cpp”给所有的行超过80个字符,但我似乎无法拉出行号或文件名。我也尝试使用猫,因为它允许行号。

的想法是让类似这样的输出:

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

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

任何帮助将是惊人的。

回答

11

几乎就在那里!这会给你一个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 
+0

谢谢!这几乎是完美的;有没有办法让行号码正确?我认为打印的行号对应于所有文件的组合文本,而不是单个文件本身。 – carlinyuen 2011-03-23 20:03:36

+1

@ Carlin:有趣。我建议使用'grep'。 – Johnsyweb 2011-03-23 20:26:09

+1

这也适用。谢谢! – carlinyuen 2011-03-23 20:45:15

0
awk 'length > 80 { print FILENAME ":" NR ": " $0 }' *.cpp 
+0

谢谢!这几乎是完美的;有没有办法让行号码正确?我认为打印的行号对应于所有文件的组合文本,而不是单个文件本身。 – carlinyuen 2011-03-23 20:04:12

+0

@ Carlin:是的。在我的回答中使用'FNR'而不是'NR'。 – Johnsyweb 2011-03-23 21:24:35

相关问题