Berapa banyak baris dalam setiap file.
Gunakan wc
, awalnya untuk jumlah kata, saya percaya, tetapi dapat melakukan garis, kata, karakter, byte, dan panjang garis terpanjang. The -l
pilihan mengatakan itu untuk menghitung garis.
wc -l <filename>
Ini akan menampilkan jumlah baris dalam:
$ wc -l /dir/file.txt
32724 /dir/file.txt
Anda juga dapat mengirim data ke pipa wc
:
$ cat /dir/file.txt | wc -l
32724
$ curl google.com --silent | wc -l
63
Berapa banyak baris dalam direktori.
Mencoba:
find . -name '*.pl' | xargs wc -l
satu kalimat lagi:
( find ./ -name '*.pl' -print0 | xargs -0 cat ) | wc -l
BTW, wc
perintah menghitung kode baris baru, bukan baris. Ketika baris terakhir dalam file tidak berakhir dengan kode baris baru, ini tidak akan dihitung.
Anda dapat menggunakan grep -c ^, contoh lengkap:
#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
Berapa banyak garis secara total
Tidak yakin saya mengerti permintaan Anda dengan benar. mis. ini akan menampilkan hasil dalam format berikut, menunjukkan jumlah baris untuk setiap file:
# wc -l `find /path/to/directory/ -type f`
103 /dir/a.php
378 /dir/b/c.xml
132 /dir/d/e.xml
613 total
Atau, untuk hanya menghasilkan total jumlah karakter baris baru tanpa file dengan jumlah file ke perintah berikut ini dapat terbukti berguna:
# find /path/to/directory/ -type f -exec wc -l {} \; | awk '{total += $1} END{print total}'
613
Yang paling penting, saya membutuhkan ini dalam 'format yang dapat dibaca manusia' misalnya. 12.345.678 daripada 12345678
Bash memiliki fungsi printf bawaan :
printf "%0.2f\n" $T
Seperti biasa, ada banyak metode berbeda yang dapat digunakan untuk mencapai hasil yang sama yang disebutkan di sini.
printf
tidak membaca argumennyastdin
, tetapi dari baris perintah (bandingkan perpipaan denganecho
vs perpipaancat
;cat
dibaca daristdin
,echo
tidak). Sebagai gantinya, gunakanprintf "$(find ... | xargs ...)"
untuk memasok output sebagai argumenprintf
.Dalam banyak kasus, menggabungkan
wc
perintah dan wildcard*
mungkin cukup.Jika semua file Anda berada dalam satu direktori, Anda dapat menghubungi:
Anda juga dapat membuat daftar beberapa file dan direktori:
Perintah ini akan menampilkan daftar file dan jumlah barisnya.
Baris terakhir adalah jumlah baris dari semua file.
Untuk menghitung semua file dalam direktori secara rekursif:
Pertama, aktifkan globstar dengan menambahkan
shopt -s globstar
.bash_profile Anda. Dukungan untuk globstar membutuhkan Bash ≥ 4.x yang dapat diinstalbrew install bash
jika diperlukan. Anda dapat memeriksa versi Anda denganbash --version
.Lalu lari:
Perhatikan bahwa output ini akan salah jika globstar tidak diaktifkan.
sumber
wc -l **/*
wc: parent_dir/child_dir: read: Is a directory
"Perintah ini akan memberikan daftar kode baris di setiap direktori:
sumber
agak terlambat ke permainan, tapi saya mendapat banyak kesalahan argumen dengan di atas karena ukuran dir. Ini bekerja untuk saya:
for i in $(find . -type f); do wc -l $i; done >> /home/counts.txt
sumber
cat
akan menggabungkan file menjadi satu dan mengeluarkan segalanya untuk stdout, Anda dapat melakukanwc -l
itu untuk jumlah total baris file dalam direktori:sumber
Saya hanya akan menambah jawaban @malyy untuk yang berikut (menjadi besar untuk komentar):
Banyak jawaban yang digunakan
wc
opsi file baris perintah denganxargs
. Masalah dengan ini adalah xargs terbatas pada ukuran ketergantungan platform yang agak kecil.Selanjutnya ada perbedaan antara BSD (macOS) dan GNU (linux / homebrew)
wc
.GNU yang ideal karena dapat membaca daftar file dari file, bukan argumen (
--files0
).Jika Anda menggunakan mac dan memiliki homebrew, Anda harus melakukan hal berikut:
Perhatikan gwc bukan wc .
sumber