2011-03-23 75 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

相關問題