3 পৃথক কলামে আউটপুট মুদ্রণ করুন


26
MYPATH=/var/www/html/error_logs/
TOTALFILE=$(ls $MYPATH* | wc -l)
FILETIME=$(stat --format=%y $MYPATH* | head -5 | cut -d'.' -f1)  
FILE=$(ls -1tcr $MYPATH* | head -5 | rev | cut -d/ -f1 | rev)
TOPLINE=$(head -1 $MYPATH* | grep -Po '".*?"' | head -5)

আমি কীভাবে শিরোনাম দিয়ে এই 5 টি ফাইলের তথ্য কলামে শিরোনাম সহ মুদ্রণ করতে পারি?

FILE CREATED TIME   | FILE NAME        | ERROR HEADER
---------------------------------------------
$FILETIME           | $FILE            | $TOPLINE
2012-11-29 11:27:45 | 684939947465     | "SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)"

এবং তাই 5 ফাইল

total files: $TOTALFILE

আমি যা চাই তা পাওয়ার কোন সহজ উপায় আছে?

দ্রষ্টব্য: এই আউটপুটটি আমি প্রতিটি ভেরিয়েবল প্রতিধ্বনিত করার পরে পেয়েছিলাম

2012-11-29 11:27:45 2012-11-29 11:27:41 2012-11-28 23:33:01 2012-11-26 10:23:37 2012-11-19 22:49:36
684939947465 1313307654813 1311411049509 1234980770182 354797376843
"SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)" "SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)" "Connection to localhost:6379 failed: Connection refused (111)" "An error occurred connecting to Redis." "SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)"

আপনি আপনার প্রশ্নের তিনটি উত্তর পেয়েছেন, যা আপনার জিজ্ঞাসিত বিষয়গুলিকে সম্বোধন করে। আপনি সুনির্দিষ্ট উত্তর পেতে চান তাতে আপনার আরও স্পষ্ট হওয়া উচিত।
— বার্নহার্ড

উত্তর:


25

আপনি তার জন্য শেল কমান্ড 'কলাম' ব্যবহার করতে পারেন, পরীক্ষা করুন: columnMAN পৃষ্ঠা ।

এটি একটি লুপের সাথে একত্রিত করুন এবং আপনি ব্যবসায়ে রয়েছেন, যেমন:

#!/bin/sh

MYPATH=/
TOTALFILE=$(ls $MYPATH/* | wc -l)
FILE=$(ls -1tcr $MYPATH/* | head -5 | rev | cut -d/ -f1 | rev)

declare -a FILES
declare -a FILETIME

OUTPUT="FILENAME CREATED TIME ERROR_HEADER\n\n------------------------------ ----------------------------- ----------------------------------- ------$

for i in $MYPATH/*;
do
    FILES[${#FILES[@]}]="$i"
    FILETIME[${#FILETIME[@]}]=$(stat --format=%y $i | head -5 | cut -d'.' -f1)
    TOPLINE=$(head -1 $i | grep -Po '".*?"' | head -5)

    OUTPUT="$OUTPUT\n${FILES[${#FILES[@]}-1]} ${FILETIME[${#FILETIME[@]}-1]} $TOPLINE\n"
done

echo -ne $OUTPUT | column -t

কোন কলামে কী ছিল সে সম্পর্কে আমার আরও নিয়ন্ত্রণের দরকার ছিল, তাই আমি কলামগুলিকে '*' এ বিভক্ত করে sed 's/^/ \* \*/g'প্রথম কলাম থেকে তৃতীয় স্থানে স্থানান্তরিত করার মতো কিছু ব্যবহার করি used আমার জন্য একটি ট্রিট কাজ।
— LOAS

28

আমি ব্যবহার করার পরামর্শ দিচ্ছি printf, যেমন:

printf "%-30s | %-30s | %-30s" "$FILETIME" "$FILE" "$TOPLINE"

যেখানে %-30s টাইপ স্ট্রিংয়ের ইনপুট আর্গুমেন্টের জন্য 30 টি অক্ষর সংরক্ষণ করা হয়। --এর মানে প্রান্তিককরণ ত্যাগ করেন।


2

আমি আ লুপ দিয়ে যেতে হবে

printf " %-20s | %-20s | %-20s\n " FILE\ CREATED\ TIME FILE\ NAME ERROR\ HEAD
for i in "$MYPATH"/*
do
    printf "%-20s | %-20s | %-20s\n " $FILENAME $FILE $TOPLINE
done
printf "Total Files: %s" $TOTALFILES 

আমি আপনাকে দিয়েছি কীভাবে সমাধান নয়। এখন আপনার কোডটি এমনভাবে মানিয়ে নেওয়া দরকার যাতে FILENAME ফাইল এবং টপলাইনটিকে লুপের আগে না করে লুপটির অভ্যন্তরে যত্ন নেওয়া হয়।
— বিটস অফনিক্স

আপনাকে আপনার সমস্ত বিস্তৃতি উদ্ধৃত করতে হবে বা এটি সহজেই ভেঙে যাবে।
— ক্রিস ডাউন

2

নিশ্চিত না যে এটি আপনি কী করছেন, ইউনিক্সে "পেস্ট" কলামে ফাইলগুলি সাজিয়ে তুলতে পারে, স্টেডআউটটি পুনরায় ফর্ম্যাট করার জন্য আপনার প্রিন্টফের প্রয়োজন হতে পারে। উদাহরণ:

স্তম্ভ


3
U&L- এ স্বাগতম, দয়া করে চিত্র হিসাবে পাঠ্য পোস্ট করবেন না, আপনি অনুলিপি অনুলিপি / পেস্ট করতে পারেন।
— আর্কেমার

1
আমি সম্মত - অনুলিপি এবং পেস্ট করুন। আমি এখনও ভোট দিতে পারছি না, সুতরাং পরিবর্তে মন্তব্য করুন
— KolonUK

1

@Qnimbus উত্তরটি সম্ভবত লিনাক্স সিস্টেমের জন্য সেরা তবে সান বা আইবিএম-তে (আপনি যদি 2019 / তে একটির ব্যবহারের পক্ষে যথেষ্ট ভাগ্যবান হন) তবে এই আদেশটি উপলব্ধ নাও হতে পারে। পরিবর্তে আপনি একই প্রভাব পেতে prকমান্ডটি ব্যবহার করতে পারেন । লিঙ্কযুক্ত পৃষ্ঠায় থাকা উদাহরণগুলি থেকে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

pr -3 word.lst | qprt

word.lst3 কলামে ফাইল মুদ্রণ করতে । এটি বলেছিল, এটি আপনার সমস্যার সমাধানের একটি অংশ মাত্র এবং বাকিগুলির জন্য আমি @Qnimbus উত্তরটি মুলতবি করি।

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