আমি কীভাবে ওয়্যারলেস সিগন্যাল স্তর এবং ফ্রিকোয়েন্সি পর্যবেক্ষণ করতে এবং সিএসভি ফর্ম্যাটে লগইন করতে পারি?


8

আমি iw dev wlan0 linkপ্রতি সেকেন্ডে অবিচ্ছিন্নভাবে কমান্ড চালাতে চাই এবং আউটপুটটিকে একটি csvফাইলে সংরক্ষণ করতে চাই ।

আমি নিম্নলিখিত কমান্ডটি ব্যবহার করছি:

while sleep 1; do
  iw dev wlan0 link | grep 'freq:\|signal' | awk '{printf "%s ", $2, $3}' >> log.csv
done

তবে আউটপুট log.csvনিম্নলিখিত উপায়ে সংরক্ষণ করা হয়েছে :

2412 -41 2412 -42 2412 -45 2412 -43

আমি আউটপুটটি এমনভাবে সংরক্ষণ করতে চাই যেখানে দুটি ক্ষেত্রটি কমা দ্বারা পৃথক করা হয়েছে (সুতরাং তারা এমএস এক্সেলের মতো সম্পাদকগুলিতে পৃথক কলামে প্রদর্শিত হবে) এবং প্রতিটি রান একটি নতুন লাইনে পরিণত হবে। log.csv(আপনি লেবেল উপেক্ষা করতে পারেন তারা কেবল ব্যাখ্যা জন্য হয়) ভালো চেহারা হইবে:

Signal  Frequency
-41     2412
-42     2412
-45     2412
-43     2412

উত্তর:


10

দৌড়ানোর সময় iw helpআপনি একটি সতর্কতা দেখতে পান:

এই সরঞ্জামটির স্ক্রীনস্ক্র্যাপ করবেন না , আমরা এর আউটপুট স্থিতিশীল বলে বিবেচনা করি না।

আছে দুটি বিভাগে আপনার সমস্যার একটি সমাধান এড়ানো প্রথম: নিচে iwএবং দ্বিতীয় আপনার প্রশ্নের উত্তর। উভয়ই গতানুগতিক awkপাশাপাশি কাজ করে (ডিফল্ট) GNU Awk

আপনার সমস্যার সমাধান

আমি এর iwconfigপরিবর্তে ব্যবহার করব iw:

while sleep 1; do
  iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
done >>log.csv

আউটপুট

$ iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
-44,2412

মন্তব্য

আপনি মানগুলি ,কোনও ট্যাব দ্বারা পৃথক করা উচিত নয় বরং (যা হবে \t), আমি ,এখানে বিভ্রান্ত হয়ে পড়েছি , আমি এখানে এবং এর বাইরে ফাঁকা স্থানগুলি বেছে নিয়েছি । আপনি যদি সেই s","fঅনুযায়ী পরিবর্তন করতে চান তা না sহলে সেখানকার মান Signalএবং মান। আমি পুনঃনির্দেশটিও সরিয়ে নিয়েছি, এইভাবে ফাইলটি প্রতিটি রানে খোলার দরকার নেই তবে একবারে।fFrequency

awkঅংশের ব্যাখ্যা

  • -F'[ :=]+'- +বর্গাকার বন্ধনীতে আবদ্ধ তিনটি অক্ষরের একটি বা একাধিক ( ) এখানে আলাদা ফিল্ড ডিলিমিটার সেট করে
  • /Freq/{gsub("\\.","");f=$5}- "ফ্রিক" দিয়ে লাইনে (গুলি), প্রতিটি বিন্দুকে কিছুই দ্বারা প্রতিস্থাপন করুন (কারণ iwconfigআউটপুটে ফ্রিকোয়েন্সিটি হাজার বিভাজক হিসাবে একটি বিন্দু ব্যবহার করে) এবং পঞ্চম কলামের বিষয়বস্তু ভেরিয়েবলে সংরক্ষণ করুনf
  • /Signal/{s=$7} - "সংকেত" সহ লাইনে (গুলি), সপ্তম কলামের সামগ্রী ভেরিয়েবলে সংরক্ষণ করুন s
  • END{print s","f}- ইনপুট প্রক্রিয়া করার পরে, printভেরিয়েবলগুলি sএবং fতাদের মধ্যে একটি আক্ষরিক কমা সহ

আপনার প্রশ্নের উত্তর

while sleep 1; do
  iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
done >>log.csv

আউটপুট

$ iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
-43,2412

awkঅংশের ব্যাখ্যা

  • /freq/{f=$2}- এর সাথে লাইনে (গুলি) freq, দ্বিতীয় কলামটি (স্থান পৃথক) পরিবর্তনশীলে সংরক্ষণ করুন savef
  • /signal/{s=$2}- এর সাথে লাইনে (গুলি) signal, দ্বিতীয় কলামটি ভেরিয়েবলে সংরক্ষণ করুনs
  • END{print s","f}- ইনপুট প্রক্রিয়া করার পরে, printভেরিয়েবলগুলি sএবং fতাদের মধ্যে একটি আক্ষরিক কমা সহ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.