কীভাবে স্পেস বা ট্যাব সহ ক্ষেত্রগুলি পৃথক করবেন


51

সাথে খেলতে গিয়ে awkআমি চালাতে এসেছি:

ls -la >> a.txt ; awk {'print $5  $1'} a.txt ;

এটি এইভাবে আউটপুট দিচ্ছে:

53277-rw-------
52347-rw-------

আউটপুট এই দুই বন্ধুর মধ্যে আমি কীভাবে একটি স্থান পেতে পারি?


1
একটি পরামর্শ হিসাবে, আপনার আউটপুট পার্স করা উচিত নয় ls। এটি আপনাকে খুব শীঘ্রই বা পিছনে কামড় দেবে।
gniourf_gniourf

দৌড়ে, দুটি স্ট্রিং print $5 $1
সংমিশ্রিত


2
@ একরব এবং ঘনিষ্ঠ ভোটাররা, লিঙ্কযুক্ত সদৃশ মোটেই সদৃশ নয়। তারা ইতিমধ্যে জেনে কীভাবে ক্ষেত্রগুলি প্রিফেস ( awk {'print $5 $1'} a.txt) দ্বারা প্রিন্ট করতে হয় । তারা জিজ্ঞাসা করছে কীভাবে ক্ষেত্র # 1 এবং ক্ষেত্র # 5 এর মধ্যে একটি স্থান স্থাপন করবেন।
কোস

উত্তর:


72

শুধু লাইন পরিবর্তন করুন

ls -la >> a.txt ; awk {'print $5 "        " $1'} a.txt ;

এটি ফাঁকা জায়গায় আউটপুট মুদ্রণ করা উচিত।

আশাকরি এটা সাহায্য করবে.

সম্পাদনা:

ম্যাকনিসের পরামর্শ অনুসারে আপনি প্রিন্টফ ব্যবহার করতে পারেন যা আপনাকে ভাল আউটপুট ফর্ম্যাট সরবরাহ করতে পারে

ls -la >> a.txt ; awk {'printf ("%5s\t%s\n", $5, $1)'} a.txt ;

4
printfফাংশন বিশেষভাবে যদি আপনি সংখ্যার ফরম্যাট করতে চান, ভাল নিয়ন্ত্রণ প্রদান করে। printf("%s\t%s\n", $5, $1)
ম্যাকনিজ

উপরের উত্তরে টাইপো আছে? কী 5sএর অর্থawk {'printf ("%5s\t%s\n", $5, $1)'}
বিশাল

66

আরও একটি বিশ্রী-নির্দিষ্ট কৌশল, "আউটপুট ফিল্ড বিভাজক" ব্যবহার করুন

ls -la | awk -v OFS='\t' '{print $5, $1}'

কমা এখানে গুরুত্বপূর্ণ।


এটি কাজ করে তবে $1নতুন
লাইনে

8

ট্যাবগুলি পাওয়ার সহজ উপায় হ'ল:

awk {'print $5"\t"$1'}

5

আমি জানি এটি একটি পুরানো থ্রেড, তবে আমি কেবল শিখছি এবং এই পোস্টগুলিকে সহায়ক বলে মনে করি। আমার সেরা সমাধানটি ছিল আপনার জন্য ভেরিয়েবলের মধ্যে ফাঁক সন্নিবেশ করানোর জন্য গাওক ব্যবহার করা।

ls -la | gawk '{print $1, $9}'

3
-1: নতুন কিছু নয়। gawk, mawkবা অন্য কোনও awk, আপনি কমা ব্যবহার করেন তবে এগুলি সমস্ত জায়গাগুলি সন্নিবেশ করান, যা এই উত্তরটি বলে।
মুরু

1
হওয়া উচিত ls -la | awk '{print $1, $9}'। যেমন মুড়ু বলেছে gawkতা দরকার নেই।
নিক ক্র্যাফোর্ড

1

আর্গুমেন্ট মধ্যে স্থান স্থাপন করতে, শুধু যোগ " ", যেমন awk {'print $5" "$1'}

তবে কমান্ডের আউটপুট পার্স করার পরামর্শ দেওয়া হয় না , কারণ এটি নির্ভরযোগ্য নয় এবং আউটপুট মানুষের জন্য, স্ক্রিপ্ট নয়। সুতরাং বিকল্প কমান্ড যেমন বা হিসাবে ব্যবহার করুন ।lsfindstat

জিএনইউ ব্যবহারের উদাহরণ এখানে রয়েছে stat:

$ stat -t *
001.txt 23 8 81a4 501 20 1000004 242236402 1 0 0 1460260387 1460260239 1460260239 1460260194 4096
7c1c.txt 21 8 81a4 501 20 1000004 242236595 1 0 0 1460261322 1460260486 1460260486 1460260486 4096

যা আপনাকে মেশিন বান্ধব আউটপুট (সংশ্লেষ আকারে) মুদ্রণ করবে, যাতে আপনার যা প্রয়োজন ঠিক তা পেতে পারেন। তারপর ব্যবহার -cনির্দিষ্ট বিন্যাস ব্যবহার করতে, বা ব্যবহারের awk, cutবা readডান কলাম জন্য।

stat --helpআরও বিকল্পের জন্য পরীক্ষা করুন। উদাহরণস্বরূপ পরিমার্জন দিনে মুদ্রণ করার জন্য, চেক এই উদাহরণে

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