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.