Command-Line

計算匹配模式的文件行數

  • December 19, 2021

我想列出與特定模式匹配的文件及其行數。到目前為止,我已經嘗試了以下方法,其中列出了與所需模式匹配的文件:

find 2021.12.*/ -maxdepth 2 -name "myfilepattern.csv" -ls

123456789  32116 -rw-rw-r--   1 user1 user1 32881884 Dec  1 23:59 2021.12.01/myfilepattern.csv
234567891      4 -rw-rw-r--   1 user1 user1      144 Dec  2 00:00 2021.12.02/myfilepattern.csv

我想在此結果中添加一列,其中包含每個文件的行數2021.12.01/myfilepattern.csv2021.12.02/myfilepattern.csv.

我對此類專欄的位置沒有任何具體要求。可以在開頭也可以在結尾。

您可以使用-printf-exec操作,以及wc -l計算行/行數:

find 2021.12.*/ -maxdepth 2 -name "myfilepattern.csv" -printf '%i\t%k\t%M\t%n\t%u\t%g\t%s\t%Tb %Td %TH:%TM\t' -exec wc -l {} \;

行數將是倒數第二列。

可能一種簡單的方法是只呼叫wc -l每個文件,然後將該輸出與-ls謂詞的輸出結合起來。以下是 using paste,並且由於我wc在 using 之前呼叫-ls,因此wc輸出將在第一列中:

find 2021.12.*/ -maxdepth 2 -name 'myfilepattern.csv' \
   -exec wc -l {} \; \
   -ls |
paste - -

為避免在 的輸出中獲取文件的路徑名wc,您必須將文件重定向到wc而不是在實用程序的命令行中傳遞它。為此-execfind我們需要呼叫一個 shell:

find 2021.12.*/ -maxdepth 2 -name 'myfilepattern.csv' \
   -exec sh -c 'wc -l <"$1"' sh {} \; \
   -ls |
paste - -

如果要獲取輸出末尾的行數,請交換-exec和周圍。-ls``-ls

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