Bash
如何以人類可讀的格式列出目錄中每個文件的行數。
我有一個包含大型 csv 文件的目錄和子目錄列表。這些文件中大約有 5 億行,每行都是一條記錄。我想知道
- 每個文件有多少行。
- 目錄中有多少行。
- 一共有多少行
最重要的是,我需要這種“人類可讀格式”,例如。12,345,678 而不是 12345678
學習如何以 3 種方式做到這一點會很好。普通的 bash 工具、awk 等,以及 perl(或 python)。
每個文件有多少行。
使用
wc
, 最初是為了計算字數,我相信,但它可以做行、單詞、字元、字節和最長的行長度。該-l
選項告訴它計算行數。wc -l <filename>
這將輸出中的行數:
$ wc -l /dir/file.txt 32724 /dir/file.txt
您還可以將數據通過管道傳輸到
wc
:$ cat /dir/file.txt | wc -l 32724 $ curl google.com --silent | wc -l 63
目錄中有多少行。
嘗試:
find . -name '*.pl' | xargs wc -l
另一個單行:
( find ./ -name '*.pl' -print0 | xargs -0 cat ) | wc -l
順便說一句,
wc
命令計算新行程式碼,而不是行。當文件中的最後一行沒有以新行程式碼結束時,這不會被計算在內。您可以使用 grep -c ^ ,完整範例:
#this example prints line count for all found files total=0 find /path -type f -name "*.php" | while read FILE; do #you see use grep instead wc ! for properly counting count=$(grep -c ^ < "$FILE") echo "$FILE has $count lines" let total=total+count #in bash, you can convert this for another shell done echo TOTAL LINES COUNTED: $total
一共有多少行
不確定我是否正確理解了您的請求。例如,這將以以下格式輸出結果,顯示每個文件的行數:
# wc -l `find /path/to/directory/ -type f` 103 /dir/a.php 378 /dir/b/c.xml 132 /dir/d/e.xml 613 total
或者,僅按文件計數將文件的換行符總數輸出到以下命令可能很有用:
# find /path/to/directory/ -type f -exec wc -l {} \; | awk '{total += $1} END{print total}' 613
最重要的是,我需要這種“人類可讀格式”,例如。12,345,678 而不是 12345678
Bash 有一個內置的printf函式:
printf "%0.2f\n" $T
與往常一樣,有許多不同的方法可用於實現此處提到的相同結果。