Bash

如何以人類可讀的格式列出目錄中每個文件的行數。

  • October 30, 2019

我有一個包含大型 csv 文件的目錄和子目錄列表。這些文件中大約有 5 億行,每行都是一條記錄。我想知道

  1. 每個文件有多少行。
  2. 目錄中有多少行。
  3. 一共有多少行

最重要的是,我需要這種“人類可讀格式”,例如。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

與往常一樣,有許多不同的方法可用於實現此處提到的相同結果。

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