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 -ltidak 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.txtmemiliki efek yang sama.
wc -l < file.txtuntuk 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.txtuntuk memperbaiki kesalahan parse dan menghapus spasi:wc -l < file.txt | bc
Bagaimana tentang
wc -l file.txt | cut -d' ' -f1
yaitu pipa keluaran wcke cut(di mana pembatas adalah spasi dan pilih saja bidang pertama)
wc -l file.txt | awk '{print $1}'OP mencoba.
wc -l < file.txtmetodenya. Tetapi harus digunakan | cut -d' ' -f2pada BSD, selama wcperintah 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 -nmenghilangkan 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 grepberfungsi untuk menghitung garis, tetapi bukan karakter.
bcadalah yang paling ringkas, dan awkdan perltampak 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 echodengan 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.
printflebih 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:].
test9dengan 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.txtmelakukan pekerjaan dengan tepat dan ringkas.