Ls -l স্প্রেডশীটে আউটপুটকে দরকারী করার জন্য ফাঁকাগুলির চেয়ে ট্যাবগুলির সাথে ক্ষেত্রগুলি পৃথক করে দেওয়া যায়?


10

ls -lফাঁকা পরিবর্তে ট্যাবগুলি ব্যবহার করে আউটপুট কীভাবে আলাদা ক্ষেত্রগুলিতে সংশোধন করা যায়? আমি আউটপুটটিকে একটি স্প্রেডশিটে আটকে দিতে চাই; ভেরিয়েবল সংখ্যক স্পেস সহ প্যাডিং এটি করা কঠিন করে তোলে। বর্ণনা করা:

drwxr-xr-x 2 রুট রুট 4096 সেপ্টেম্বর 26 11:43 ডব্লিউপিএ_সপ্লিক্যান্ট
-rw-r ----- 1 রুট ডায়ালআউট 66 সেপ্টেম্বর 26 11:43 wvdial.conf
drwxr-xr-x 9 রুট রুট 4096 অক্টোবর 8 08:21 এক্স 11
drwxr-xr-x 12 রুট রুট 4096 ফেব্রুয়ারী 23 23:31 এক্সডিজি
drwxr-xr-x 2 রুট রুট 4096 জানুয়ারী 31 06:11 এক্সএমএল
drwxr-xr-x 2 রুট রুট 4096 নভেম্বর 22 07:26 এক্সুল-এক্স
-rw-r - r-- 1 টি মূল রুট 349 জানুয়ারী 13 2012 zsh_command_not_found

থেকে উদ্ধৃতাংশ ইন ls -l /etcযেহেতু সারি 4 দুই আছে, উপরে দেখানো সারি 1, 2 এবং 3 কলাম 2 একটি একক অঙ্ক আছে। তার মানে সারিতে 1-3 এবং কলামগুলিতে আলাদা আলাদা কলামের জন্য দুটি স্পেস ব্যবহার করে, তবে সারি 4-এ কেবল একটি ফাঁকা জায়গা ব্যবহার করে প্রান্তিককরণটি অর্জন করা হবে।

ls 

উত্তর:


3

আমি এটির জন্য একটি শেল স্ক্রিপ্ট তৈরি করেছি। ফাইলের নামগুলিতে স্পেস বা অন্য কোনও বিশেষ অক্ষর থাকলে এটি কেসগুলির যত্ন নেয়।

#! / বিন / ব্যাশ

SAVEIFS = $ IFS
আইএফএস = $ (প্রতিধ্বনিত "\ n \ b")
file (এলএস) এ ফাইলের জন্য
করা
    স্টেট - প্রিন্টফ = "% এ \ টি% এইচ \ টি% ইউ \ টি% জি \ টি% এস \ টি" $ ফাইল
    মোড_পচ = $ (স্ট্যাটাস - ফর্ম্যাট = "% ওয়াই" $ ফাইল)
    mod_month = $ (তারিখ -d @ $ mod_epoch + "% বি")
    মোড_ডে = $ (তারিখ -d @ $ মোড_পচ + "% ডি")
    মোড টাইম = $ (তারিখ -d @ $ মোড_পচ + "% এইচ:% এম")
    প্রিন্টফ "% s \ t% s \ t% s \ t% s \ n" $ মোড_মোথ $ মোড_ডে $ মোড_টাইম $ ফাইল
সম্পন্ন
IFS = $ SAVEIFS
  • এটি একটি ফাইলে সংরক্ষণ করুন, বলুন ls_tab.sh
  • এটি সম্পাদনযোগ্য করুন:
chmod + x ls_tab.sh
  • চালাও এটা:
./ls_tab.sh

দ্রষ্টব্য: এটি আউটপুট বিশ্লেষণ করে করা যেতে পারে ls, তবে এটি কেন করা উচিত নয় তা কারণ এখানে দেওয়া হল ।


1
লক্ষ্য জানতে হয়, তাহলে কি lsবলছেন , তার আউটপুট পার্স জরিমানা। এটি খুব কমই লক্ষ্য। যুক্তিযুক্তভাবে এটি এখানে। আমার মনে হয় আপনি যে পদ্ধতিটি ব্যবহার করেছেন তা বেশ ভাল (যে কোনও পদ্ধতি প্রয়োজনের কিছু সেট দেখিয়ে অনাকাঙ্ক্ষিত ফলাফল আনবে )! তবে যুক্তিযুক্তভাবে পার্সিং lsআরও ভাল হতে পারে। কোনও ফাইল নামের ক্ষেত্রে বিবেচনা করুন যা এর মধ্যে একটি ট্যাব অক্ষর রয়েছে। ls -lএকটি ?অক্ষরের সাথে ট্যাবটি প্রতিস্থাপন করে । আপনার স্ক্রিপ্টটি ট্যাব চরিত্রটিকে সংরক্ষণ করে, যা এর আউটপুটটিকে ট্যাব-বর্ণিত হিসাবে ব্যাখ্যা করা হয় এবং স্প্রেডশিট তৈরি করতে ব্যবহৃত হলে অতিরিক্ত কলাম তৈরি করে। কোনও ফাইলনামে একটি নতুন লাইন থাকলে এটি খারাপভাবে হ্রাস পায়।
এলিয়াহ কাগন

1
সত্য। তবে সাধারণত ফাইলগুলির নাম \nবা \tতাদের নাম থাকে না। যদি তারা এটি করে, তবে lsসাধারণ ব্যাশ কমান্ডগুলির সাথে আউটপুট পার্সিং করা আরও জটিল হবে, তবে এটি অর্জন করা যায়। আমি উত্তরটি আপডেট করতে পারি, যদি ওপি এই জাতীয় মামলাগুলি পরিচালনা করতে চায়।
সবুজ

এটি আমার পক্ষে কাজ করে এবং এগুলিতে ফাঁকা জায়গা সহ দীর্ঘ ফাইলের নামগুলি সঠিকভাবে প্রদর্শিত হয়। আমার ব্যবহার মোটামুটি সহজ এবং আমি আশা করি যে ফাইলগুলির সাথে \nএবং \tতাদের নামগুলি নিয়ে व्यवहार করবেন না।

1
পারফেক্ট। উইন্ডোজের স্পিডশিট ব্যবহারের জন্য printf "%s\t%s\t%s\t%s\r\n" $mod_month $mod_day $mod_time $fileএবং ফাইলটিকে আউটপুট হিসাবে পুনর্নির্দেশ করতে ./ls_tab.sh > listing.txt
ফেদির RYKHTIK

6

চেষ্টা করুন:

ls -l | awk -v OFS="\t" '$1=$1'

অথবা, যদি আপনার ফাইলের নামের ফাঁকা স্থান থাকে:

ls -l | awk '{print $1,"\t",$2,"\t",$3,"\t",$4,"\t",$5,"\t",$6,"\t",$7,"\t",$8,"\t",$9,$10,$11,$12,$13,$14,$15;}'

+1 টি। পুরোপুরি কাজ করে। এই ধরণের জিনিসটি ঠিক কী awkজন্য হয় is চতুর!
টিজিগুলি

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

1
দয়া করে আপডেট দেখুন
ফিল্মসেম

@ psny18 আপডেট হওয়া উপায়টি আরও খারাপভাবে ভেঙে গেছে। এটি প্রতিটি ফাইলের নামের প্রথম শব্দ বাদে সমস্ত কিছু কেটে দেয়। সহজভাবে লেখার $9ফলে আপনি যে awkজায়গাগুলি সর্বদা কলামগুলির মধ্যে বিরতির ইঙ্গিত হিসাবে স্পেসের ব্যাখ্যা করছেন তা পরিবর্তিত হয় না । $9সেই অবস্থানটিতে কেবল প্রথম শব্দটি ধারণ করে এবং যেহেতু অন্য শব্দগুলি পৃথক, উচ্চতর সংখ্যাযুক্ত কলাম হিসাবে বিবেচিত হয়, সেগুলি কখনই মুদ্রিত হয় না।
এলিয়াহ কাগান

এটি অত্যন্ত দুঃখের বিষয় যে ফাইলনামগুলিতে শূন্যস্থান থাকা সত্ত্বেও সেগুলি একটি কলাম হিসাবে বিবেচনা করা হবে না।

1

আমাদের আউটপুটটিকে ট্যাব ডিলিমিট হিসাবে রূপান্তর করতে হবে না। কলামগুলির মধ্যে স্থান ঠিক যথেষ্ট।

ls -lআপনি সাধারনভাবে টার্মিনালে আপনার কমান্ডটি চালান এবং আপনার স্প্রেডশিটে আটকানো যেতে চান এমন সামগ্রীগুলি অনুলিপি করুন।

টার্মিনাল কমান্ড

এরপরে, আপনার স্প্রেডশিট প্রোগ্রামটি খুলুন (আমার ক্ষেত্রে LibreOffice ক্যালক) এবং আপনার ক্লিপবোর্ডের বিষয়বস্তু আটকানোর জন্য Ctrl+ টিপুন V

পাঠ্য আমদানি উইজার্ড পপ আপ হবে। নিশ্চিত হয়ে নিন যে আপনি পাশে একটি চেকমার্ক রেখেছেন Spaceএবং টিপুন Ok। আপনি নিম্ন ফলকে পূর্বরূপ দেখতে পারেন।

লিবো পাঠ্য আমদানি


1
ফাইলের নামগুলি ফাঁকা
সবুজ

@ গ্রীন:: আহ .. বুঝতে পারিনি! :-)
আদিত্য

কেবল ফাইলের নামই নয় কলামগুলিতে অক্ষরের সংখ্যাও। "স্থান" ডিলিমিটার হিসাবে বেছে নেওয়া হলে সেখানে এবং অন্য কোথাও প্যাডিং সমস্যার সৃষ্টি করে। আমি তা বর্ণনা করতে প্রশ্ন সম্পাদনা করব।

0

অজগর এটি জন্য ভাল:

# python
import os

os.system( 'ls -lR --time-style=full-iso /home/jw > ls_dump.txt')

folder = ''

for line in open('ls_dump.txt', 'r'):

    inrec = line.split()

    if inrec == []:
        continue

    if inrec[0].startswith('total'):
        continue

    if inrec[0].endswith(':'):
        folder = inrec[0].replace(':','')
        continue

    outline = folder + '\t' + '\t'.join(inrec[0:8]) +'\t'+ ' '.join(inrec[8:]) 

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