Saya memiliki skrip shell yang digunakan find -print0
untuk menyimpan daftar file yang akan diproses menjadi file sementara. Sebagai bagian dari pencatatan, saya ingin menampilkan jumlah file yang ditemukan, jadi saya perlu cara untuk menghitungnya. Jika -print0
opsi tidak digunakan untuk keselamatan saya bisa menggunakan wc -l
untuk menghitung.
shell-script
qqx
sumber
sumber
head
dantail
pada input null-dibatasi di bash?Jawaban:
Beberapa opsi:
Perhatikan bahwa untuk input yang berisi data setelah karakter NUL terakhir (atau input non-kosong tanpa karakter NUL),
tr
pendekatan akan selalu menghitung jumlah karakter NUL, tetapi pendekatanawk
/sed
/grep
akan menghitung catatan tambahan untuk byte tambahan tersebut .sumber
head -c 5G /dev/urandom > f
). Hasil: grep 1.7s (sama untukgrep -Fcz ''
) • tr + wc-c 7.7s • tr + wc-l 7.4s • sed 34.7s • awk 1m11.7sawk
, Anda ingin mengatur lokal keC
(atau yang tidak menggunakan karakter multibyte),LC_ALL=C awk ... < f
LC_ALL=C
disort
mana itu tidak mempercepat, oleh karena itu Untungnya saya masih memiliki file dari sebelumnya:LC_ALL=C awk ...
dibutuhkan 6.7s.Metode terbaik yang bisa saya pikirkan adalah menggunakan
grep -zc '.*'
. Ini berfungsi, tetapi rasanya salah menggunakan grep dengan pola yang cocok dengan apa pun.sumber
Dengan
perl
:atau:
atau:
sumber
wc -l
) sebagai catatan (seperti yang diinginkan).