wc -l file.txt
menampilkan jumlah baris dan nama file.
Saya hanya perlu nomor itu sendiri (bukan nama file).
aku bisa melakukan ini
wc -l file.txt | awk '{print $1}'
Tapi mungkin ada cara yang lebih baik?
wc -l file.txt
menampilkan jumlah baris dan nama file.
Saya hanya perlu nomor itu sendiri (bukan nama file).
aku bisa melakukan ini
wc -l file.txt | awk '{print $1}'
Tapi mungkin ada cara yang lebih baik?
Jawaban:
Coba dengan cara ini:
wc -l < file.txt
wc -l
tidak boleh memancarkannya, dan mengapa ksh akan menambahkan keluaran standar dari sebuah program dengan spasi?
4711 [stdin]
output.
printf "%'d"
, yang menangani ruang dan mencetak sejumlah besar dengan baik.
cat file.txt | wc -l
Menurut halaman manual (untuk versi BSD, saya tidak memiliki versi GNU untuk memeriksa):
Jika tidak ada file yang ditentukan, input standar digunakan dan tidak ada nama file yang ditampilkan. Prompt akan menerima input hingga menerima EOF, atau [^ D] di sebagian besar lingkungan.
wc -l < file.txt
memiliki efek yang sama.
wc -l < file.txt
untuk menghindari penggunaan kucing yang tidak berguna. Meskipun Anda benar-benar gila jika Anda berpikir bahwa itu menghabiskan waktu yang nyata.
Untuk melakukan ini tanpa ruang utama, mengapa tidak:
wc -l < file.txt | bc
wc -l < file.txt
untuk memperbaiki kesalahan parse dan menghapus spasi:wc -l < file.txt | bc
Bagaimana tentang
wc -l file.txt | cut -d' ' -f1
yaitu pipa keluaran wc
ke cut
(di mana pembatas adalah spasi dan pilih saja bidang pertama)
wc -l file.txt | awk '{print $1}'
OP mencoba.
wc -l < file.txt
metodenya. Tetapi harus digunakan | cut -d' ' -f2
pada BSD, selama wc
perintah mengembalikan spasi terkemuka, contoh: "34068289 file.txt", bukan "34068289 file.txt".
Saya memiliki masalah serupa yang berusaha untuk mendapatkan jumlah karakter tanpa spasi kosong terkemuka yang disediakan oleh wc
, yang membawa saya ke halaman ini. Setelah mencoba jawabannya di sini, berikut ini adalah hasil dari pengujian pribadi saya pada Mac (BSD Bash). Sekali lagi, ini untuk jumlah karakter; untuk jumlah baris yang akan Anda lakukan wc -l
. echo -n
menghilangkan jeda baris trailing.
FOO="bar"
echo -n "$FOO" | wc -c # " 3" (x)
echo -n "$FOO" | wc -c | bc # "3" (√)
echo -n "$FOO" | wc -c | tr -d ' ' # "3" (√)
echo -n "$FOO" | wc -c | awk '{print $1}' # "3" (√)
echo -n "$FOO" | wc -c | cut -d ' ' -f1 # "" for -f < 8 (x)
echo -n "$FOO" | wc -c | cut -d ' ' -f8 # "3" (√)
echo -n "$FOO" | wc -c | perl -pe 's/^\s+//' # "3" (√)
echo -n "$FOO" | wc -c | grep -ch '^' # "1" (x)
echo $( printf '%s' "$FOO" | wc -c ) # "3" (√)
Saya tidak akan bergantung pada cut -f*
metode ini secara umum karena ini mengharuskan Anda mengetahui jumlah pasti dari ruang terdepan yang mungkin dimiliki keluaran apa pun. Dan yang grep
berfungsi untuk menghitung garis, tetapi bukan karakter.
bc
adalah yang paling ringkas, dan awk
dan perl
tampak sedikit berlebihan, tetapi mereka semua harus relatif cepat dan cukup portabel.
Juga perhatikan bahwa beberapa di antaranya dapat disesuaikan untuk memangkas ruang putih di sekitarnya dari string umum, juga (bersama dengan echo `echo $FOO`
, trik lain yang rapi).
echo $(printf '%s' "$FOO" | wc -c)
adalah salah satu kesempatan langka ketika echo
dengan subshitusi perintah tidak sia-sia.
echo `echo $FOO`;
juga bertindak seperti perintah String.trim () pada variabel! Itu sangat berguna. Saya juga akan menambahkan baris Anda ke jawaban saya.
printf
lebih baik daripada echo
?
Jelas, ada banyak solusi untuk ini. Ini satu lagi:
wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"
Ini hanya menghasilkan jumlah baris, tetapi karakter baris baru ( \n
) ada, jika Anda tidak menginginkannya, ganti [:blank:]
dengan [:space:]
.
test9
dengan 1 baris di dalamnya, output akan menjadi 19.
Cara terbaik adalah pertama-tama menemukan semua file dalam direktori kemudian gunakan AWK NR (Number of Records Variable)
di bawah ini adalah perintahnya:
find <directory path> -type f | awk 'END{print NR}'
contoh: - find /tmp/ -type f | awk 'END{print NR}'
wc -l < file.txt
melakukan pekerjaan dengan tepat dan ringkas.