কীভাবে মাথা, লেজ, আরও, কম, সেগুলি পাওয়ারশেলগুলিতে করবেন? [বন্ধ]


109

উইন্ডোজ, PowerShell ব্যবহার করে, সমতুল্য কমান্ড কী লিনাক্স এর উপর head, tail, more, lessএবং sed?


লগ ফাইলটি বেশ বড়, প্রায় বেশ কয়েকটি এমবাইট। নোটপ্যাড.এক্সে দ্বারা দেখা খুব শক্ত।
ইউ জাং

আপনি যদি notepadআপনার ভিত্তি হিসাবে ব্যবহার করছেন তবে আমি বিকল্প পাঠ্য সম্পাদকদের দিকে নজর দেওয়ার পরামর্শ দিচ্ছি, প্রচুর (নিখরচায় এবং প্রদত্ত উভয়ই) বিকল্প রয়েছে। সকলেই নোটপ্যাডের চেয়ে উন্নত (যদিও এটি চ্যালেঞ্জের চেয়ে বেশি কিছু নয়)।
রিচার্ড


আমি বড় ফাইলগুলির সাথে ডিল করি এবং আমি Vim ব্যবহার / ইনস্টল করি যা আমার ব্যবহারকারীর অন্যান্য সরঞ্জামের চেয়ে অনেক দ্রুত প্রমাণ করে।
sfanjoy

উত্তর:


174

Get-Content(ওরফে gc:) একটি পাঠ্য ফাইল পড়ার জন্য আপনার স্বাভাবিক বিকল্প। এরপরে আপনি আরও ফিল্টার করতে পারেন:

gc log.txt | select -first 10 # head
gc -TotalCount 10 log.txt     # also head
gc log.txt | select -last 10  # tail
gc -Tail 10 log.txt           # also tail (since PSv3), also much faster than above option
gc log.txt | more             # or less if you have it installed
gc log.txt | %{ $_ -replace '\d+', '($0)' }         # sed

এটি ছোট ফাইলগুলির জন্য যথেষ্ট ভাল কাজ করে, বৃহত্তর ফাইলগুলি (কয়েকটি MiB এর বেশি) সম্ভবত কিছুটা ধীর slow

PowerShell কমিউনিটি এক্সটেনশানগুলি বিশেষ ফাইল কাপড় (যেমন পান-FileTail) জন্য কিছু cmdlets অন্তর্ভুক্ত।


3
পবিত্র গরু, এটি -last 21 জিবি সিএসভিতে আমার সিপিইউ বাড়িয়ে তুলছে । গরম পানীয়:

9
@ মিলসনার: আপনি পাওয়ারশেল ভি 3 এ থাকলে আপনি Get-Content -Tail 2পরিবর্তে ব্যবহার করতে পারেন । এটা অবশ্যই দ্রুত।
জোয়

gc log.txt | %{ $_ -replace '\d+', '($0)' } # sedএটি সম্পূর্ণরূপে সেড সরঞ্জাম নয় কারণ এটি সামগ্রীটিকে পিছনে ফেলে না। এটি সেট-সামগ্রী প্রয়োজন।
আরটিওম

3
@ নীল, -Lastএকই কারণে awkধীর এবং একই কাজের জন্য ধীর হবে: প্রথমে এটি প্রথমে প্রবাহটি গ্রাস করতে হবে। এজন্যই Get-Content -Tailবিদ্যমান। এবং এর কোনও headকারণ নেই যে এটি নামকরণের সম্মেলনে ফিট করে না এবং এর উদ্দেশ্য ইতিমধ্যে দ্বারা সম্পাদিত হয়েছে Select-Item
জোয়

3
@neil @ joey তাদের একটি উপনাম রয়েছে -head। আমার উত্তর দেখুন stackoverflow.com/a/41626586/1081043
wisbucky

52

এখানে করার অন্তর্নির্মিত উপায়গুলি headএবং এখানে রয়েছে tail। পাইপ ব্যবহার করবেন না কারণ আপনার কাছে যদি একটি বড় ফাইল থাকে তবে এটি অত্যন্ত ধীর হবে। এই অন্তর্নির্মিত বিকল্পগুলি ব্যবহার করা এমনকি বিশাল ফাইলগুলির জন্য অত্যন্ত দ্রুত হবে।

gc log.txt -head 10 
gc log.txt -tail 10
gc log.txt -tail 10 -wait # equivalent to tail -f

তবে জোয়ের মন্তব্য ঠিক এর বিপরীত ইঙ্গিত দেয়! কাকে বিশ্বাস করব বা কোনটি (অন্তর্নিহিত) পদ্ধতিটি সবচেয়ে দক্ষ?
এনএইচ।

2
@NH আমার উত্তর জয়ের মন্তব্যের সাথে একমত। তাঁর মন্তব্য বলেছে "" সর্বশেষ ধীর ... তাই গেট-কনটেন্ট-টেইল বিদ্যমান। " | select -lastপাইপ ব্যবহার করে আমি -tailপাইপ ছাড়াই ব্যবহার করছি তবে আপনি যদি দুটি বিবাদযুক্ত উত্তর খুঁজে পান তবে আপনি সম্ভবত অনেক বেশি খ্যাতিযুক্ত ব্যক্তির উপর বিশ্বাস রাখতে পারেন। এছাড়াও, আপনি কেবল একটি বড় ফাইলটিতে দুটি পদ্ধতি চেষ্টা করতে পারেন। এটি একটি বড় ফাইলে খুব স্পষ্ট হবে be
উইসবাকি

বুঝেছি. দুঃখিত, পোস্টগুলি পড়ার সময় আমি অবশ্যই বিভ্রান্ত হয়ে পড়েছি।
এনএইচ।

8

more.exeউইন্ডোজে বিদ্যমান, পোর্টগুলি lessসহজেই পাওয়া যায় (এবং পাওয়ারশেল সম্প্রদায় এক্সটেনশনগুলি , পিএসসিএক্স এর মধ্যে একটি রয়েছে)।

পাওয়ারশেল উভয়ের জন্য পৃথক পৃথক প্রোগ্রামের জন্য সত্যিই কোনও বিকল্প সরবরাহ করে না, তবে কাঠামোগত ডেটার জন্য Out-Gridসহায়ক হতে পারে।

Headএবং Tailউভয়ই যথাক্রমে এবং পরামিতিগুলি Select-Objectব্যবহার করে অনুকরণ করা যায়।-First-Last

Sedফাংশনগুলি সমস্ত উপলভ্য তবে কাঠামোগত ভিন্ন ভিন্ন। ফিল্টারিং বিকল্পগুলি Where-Object(বা এর মাধ্যমে Foreach-Objectএবং কিছুদল রেঞ্জের জন্য) এ উপলব্ধ। অন্যান্য, রূপান্তরকরণ, অপারেশনগুলি Select-Objectএবং এর সাথেও করা যেতে পারে Foreach-Object

তবে পাওয়ারশেল যেমন (.NET) অবজেক্টগুলিতে পাস করে - তাদের সমস্ত টাইপ করা কাঠামো সহ, যেমন। তারিখগুলি DateTimeদৃষ্টান্তগুলি থেকে যায় - কেবল স্ট্রিংগুলির পরিবর্তে যা প্রতিটি কমান্ডকে নিজের বিশ্লেষণ করতে হবে, অনেকগুলি sedএবং এই জাতীয় প্রোগ্রামগুলি অপ্রয়োজনীয়।


উজ্জ্বল। জিসি পাইপ ইনপুট সমর্থন করে না বলে মনে হচ্ছে। আমি যখন কোনও কমান্ডের আউটপুট ফিল্টার করতে চাই, আমি "... উদাহরণ ... | সিলেক্ট-অবজেক্ট -প্রথম 20 | সিলেক্ট-অবজেক্ট
-স্টাল্ট

2

এই উদাহরণে "-তোটালকাউন্ট" হুবহু "-হেড" এর মতো প্রতিক্রিয়া জানায়। কমান্ডটি চালানোর জন্য আপনাকে -টোটালকাউন্ট বা হেড ব্যবহার করতে হবে। তবে -টোটালকাউন্ট বিভ্রান্তিমূলক - এটি আসলে আপনাকে কোনও গণনা দেওয়ার ক্ষেত্রে কার্যকর হয় না ...

gc -TotalCount 25 C:\scripts\logs\robocopy_report.txt

উপরের স্ক্রিপ্ট, পিএস 5.1 তে পরীক্ষা করা নীচের মত একই প্রতিক্রিয়া ...

gc -head 25 C:\scripts\logs\robocopy_report.txt

সুতরাং ইতিমধ্যে ইতিমধ্যে 'হেড 25 "ব্যবহার করুন!


হাই @ পেট্রিক, স্ট্যাক ওভারফ্লোতে আপনাকে স্বাগতম! এই প্রশ্নের উত্তর দেওয়ার চেষ্টা করার জন্য ধন্যবাদ, আপনি কি আরও বিস্তারিত ব্যাখ্যা প্রদান করতে পারেন? আপনি কোনও সমাধান দেওয়ার চেষ্টা করছেন বা সমস্যা সম্পর্কে কিছু মন্তব্য যুক্ত করার চেষ্টা করছেন কিনা তা অস্পষ্ট।
রোকো গার্সিয়া Luque

এটি একটি মন্তব্য ছিল এবং হতাশাও ছিল। '-টোটালকাউন্ট "-হ্যাড" ইতিমধ্যে কিছু করে না So সুতরাং কেউ কীভাবে টোটালকাউন্ট পেতে যায় তা জানেন?
প্যাট্রিক বারওয়েল

এটি আবার পড়ুন ... আমি উত্তরে যুক্ত হয়েছি এবং কী কাজ করে তা পরিষ্কার করে দিয়েছি ...
প্যাট্রিক বারওয়েল

1

আপনার যদি উইন্ডোজে বড় (বা ছোট) লগ ফাইলগুলি জিজ্ঞাসা করতে হয় তবে আমি খুঁজে পাওয়া সেরা সরঞ্জামটি মাইক্রোসফ্টের ফ্রি লগ পার্সার ২.২ 2 . আপনি চাইলে পাওয়ারশেল থেকে কল করতে পারেন এবং এটি আপনার জন্য সমস্ত ভারী উত্তোলন করবে এবং খুব দ্রুত।


যাইহোক ধন্যবাদ, আমার পরিবেশটি Win2k8R2 যা লগ পার্সার 2.2 এর সিস্টেমের প্রয়োজনীয়তায় নয়
ইউ জাং

0

আমি আরও ভাল সমাধান পেয়েছি:

gc log.txt -ReadCount 5 | %{$_;throw "pipeline end!"} # head
gc log.txt | %{$num=0;}{$num++;"$num $_"}             # cat -n
gc log.txt | %{$num=0;}{$num++; if($num -gt 2 -and $num -lt 7){"$num $_"}} # sed

-1
$Push_Pop = $ErrorActionPreference #Suppresses errors
$ErrorActionPreference = SilentlyContinue #Suppresses errors
#Script
    #gc .\output\*.csv -ReadCount 5 | %{$_;throw "pipeline end!"} # head
    #gc .\output\*.csv | %{$num=0;}{$num++;"$num $_"}             # cat -n
    gc .\output\*.csv | %{$num=0;}{$num++; if($num -gt 2 -and $num -lt 7){"$num $_"}} # sed
#End Script 
$ErrorActionPreference = $Push_Pop #Suppresses errors

আপনি পুশপপ কোড বিটিডাব্লু দিয়ে সমস্ত ত্রুটি পাবেন না, আপনার কোডটি কেবল "সেড" বিকল্পের সাথে কাজ করে। বাকিরা জিসি এবং পথ ব্যতীত অন্য কিছু উপেক্ষা করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.