Command

行數大於 2 的文件列表

  • May 21, 2015

一堆文件存在於一個目錄中。有些文件有 1 行,有些文件有更多的行數。

我正在嘗試顯示來自特定目錄(帶有完整路徑)的文件名,其中文件中的行數> 2。

我到這裡,來顯示目錄中的文件。查找 /abc/def -maxdepth 1 -type f

使用 GNU awkor mawk and some others,列出目前目錄中至少包含 3 行的正常文件:

find . ! -name . -prune -type f -size +2c -exec awk '
  FNR==3{print FILENAME; nextfile}' {} +

(請注意,這也計算未終止的行。如果文件包含a\nb\nc而不是a\nb\nc\n,即使wc -l只返回 2 ,仍然認為該文件有 3 行。-size +2c這只是跳過打開和讀取少於 3 個字節的文件的優化,因為那些不能包含 3 行)。

這是有效的,因為它執行盡可能少的命令,並在看到第 3 行時立即停止處理文件,而不是完全讀取文件以查找行數。

如果您的外殼是zsh,您可以將其縮短為

awk 'FNR==3{print FILENAME; nextfile}' ./*(D.L+2)

find . ! -name . -prune是 GNU 的標準等價物find . -mindepth 1 -maxdepth 1修剪每個目錄,但.)。

(請注意,awk上面的程式碼也可以在awk不支持的實現中工作nextfile,只是它將在那裡完全讀取文件,該nextfile語句將被視為變數引用)。

grep -Hsc . -- * | sed -n '/:[0-2]$/!s/:.*$//p'

但不要將空行計算在內。如果你想把它計算在內:

grep -Hsc '$' -- * | sed '/:[0-2]$/d;s/:.*$//'

引用自:https://unix.stackexchange.com/questions/204855