Command-Line
計算匹配模式的文件行數
我想列出與特定模式匹配的文件及其行數。到目前為止,我已經嘗試了以下方法,其中列出了與所需模式匹配的文件:
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.csv
和2021.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
謂詞的輸出結合起來。以下是 usingpaste
,並且由於我wc
在 using 之前呼叫-ls
,因此wc
輸出將在第一列中:find 2021.12.*/ -maxdepth 2 -name 'myfilepattern.csv' \ -exec wc -l {} \; \ -ls | paste - -
為避免在 的輸出中獲取文件的路徑名
wc
,您必須將文件重定向到wc
而不是在實用程序的命令行中傳遞它。為此-exec
,find
我們需要呼叫一個 shell:find 2021.12.*/ -maxdepth 2 -name 'myfilepattern.csv' \ -exec sh -c 'wc -l <"$1"' sh {} \; \ -ls | paste - -
如果要獲取輸出末尾的行數,請交換
-exec
和周圍。-ls``-ls