পাইপযুক্ত ডেটার আকার কীভাবে পরিমাপ করা যায়?


16

আমি এই জাতীয় কিছু করতে চাই:

> grep pattern file.txt | size -h
16.4 MB

বা এর সমতুল্য কিছু:

> grep pattern file.txt > grepped.txt
> ls -h grepped.txt
16.4 MB
> rm grepped.txt

(যদিও এটি কিছুটা অসুবিধাজনক হবে)

এটা কি সম্ভব?

উত্তর:


32

আপনি এটির wcজন্য ব্যবহার করতে পারেন :

grep pattern file.txt | wc -c

আউটপুটে বাইট সংখ্যা গণনা করা হবে। আপনি বৃহত্তর মানগুলিকে "মানব-পঠনযোগ্য" ফর্ম্যাটে রূপান্তর করতে পোস্ট-প্রক্রিয়া করতে পারেন

আপনি pvপাইপের ভিতরে এই তথ্যটি পেতে ব্যবহার করতে পারেন:

grep pattern file.txt | pv -b > output.txt

(এটি মানব-পঠনযোগ্য ফর্ম্যাটে প্রক্রিয়াজাত বাইটের সংখ্যা প্রদর্শন করে)।


1
আমি পছন্দ করি wc -cকারণ du -hএটি ব্লকগুলিতে যেমন পড়ছে তেমন 4,0k এর চেয়ে ছোট যদি returns 4.0 K` প্রদান করে
স্ট্যান স্ট্রাম

এমবিতে আউটপুট মুদ্রণ করা যথেষ্ট হলে কমান্ডটি হতে পারে | wc -c | sed 's/$/\/1024\/1024/' | bc। এটি /1024/1024আউটপুটে সংযোজন করে এবং ফলস্বরূপ স্ট্রিংয়ের উপর একটি ক্যালকুলেটর চালায়।
ফিল 294


3

পাইপ ভিউয়ার ইউটিলিটি এই কাজের জন্য পরিকল্পনা করা হয়েছিল। যদি এটি আপনার উদ্দেশ্যে পর্যাপ্ত নমনীয় না হয় তবে আপনি পাইপলাইন ম্যানিপুলেশন লাইব্রেরি ( লাইবপাইপলাইন ) ফাংশন কল pipeline_pump()এবং এর সাথে আপনার নিজের ফিফোর ডেটা ট্রান্সফার মাপার কোডটি প্রয়োগ করতে পারেন pipeline_peek_size()

$ whatis pv
pv (1)               - monitor the progress of data through a pipe
$ pv -Wi 0.002 -cf /etc/hosts | wc -l
 367 B 0:00:00 [2.71MiB/s] 
[============================================================================>] 
100%
10
$

1

পাইথনে যে কেউ দ্রুত নিজস্ব সমাধান তৈরি করতে পারে:

#!/usr/bin/env python
import sys

count = 0
while True:
    byte = sys.stdin.read(1)
    if not byte:
        break
    count =  count + 1

print(count)

যেমনটি কাজ করে:

$ echo "Hi" | ./count_stdin_bytes.py
3
$ echo "Hello" | ./count_stdin_bytes.py
6
$ dd if=/dev/zero bs=1 count=1024 2>/dev/null |  ./count_stdin_bytes.py 
1024

আপনার নির্দিষ্ট ক্ষেত্রে যেহেতু আপনি টেক্সট ডাটা (বাস্তবতা থেকে বিচার যে আপনার কাছ থেকে পাইপ সাথে এসেছেন ডিলিং grep), তবে আপনাকে ব্যবহার করতে পারে bash'র read। এটার মতো কিছু:

$ echo "Hello" | { while read -n 1 char; do ((count++)) ;done ; echo $count; }
6

এর চেয়ে ভাল কেন wc -c? while read ...সম্ভবত উল্লেখযোগ্যভাবে ধীর হবে। এছাড়াও, ওপি মানব পাঠযোগ্য আউটপুট হিসাবে ( ls -h)
ফিল 294
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.