大きなcsvファイルを含むディレクトリとサブディレクトリのリストがあります。このファイルには約5億行があり、各行はレコードです。知りたい
- 各ファイルにはいくつの行がありますか?
- ディレクトリに何行がありますか?
- 総数行ですか?
最も重要なのは、「人が読める形式」が必要だということです。 12345678の代わりに12,345,678
3つの方法でこれを行う方法を学ぶのが良いでしょう。一般的なbashツール、awkなどとPerl(またはPython)。
ベストアンサー1
各ファイルにはいくつの行がありますか?
もともと使用されたのは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
最も重要なのは、「人が読める形式」が必要だということです。 12345678の代わりに12,345,678
バッシュには一つがあります印刷機能内蔵機能:
printf "%0.2f\n" $T
いつものように、ここで言及したのと同じ結果を得るためのさまざまな方法があります。