এর মধ্যে শেল ভেরিয়েবলগুলি পাওয়া awk
বিভিন্ন উপায়ে করা হতে পারে। কিছু অন্যদের চেয়ে ভাল। এটি তাদের বেশিরভাগটি আবরণ করা উচিত। আপনার মতামত থাকলে নীচে ছেড়ে দিন। v1.5
ব্যবহার -v (সর্বোত্তম উপায়, সর্বাধিক বহনযোগ্য)
-vবিকল্পটি ব্যবহার করুন : (পিএস পরে কোনও স্থান ব্যবহার করুন -vবা এটি কম পোর্টেবল হবে Eg যেমন, awk -v var=না awk -vvar=)
variable="line one\nline two"
awk -v var="$variable" 'BEGIN {print var}'
line one
line two
এটি বেশিরভাগের সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত awkএবং ভেরিয়েবলটি পাওয়া যায়BEGIN ব্লকটিতেও :
আপনার যদি একাধিক ভেরিয়েবল থাকে:
awk -v a="$var1" -v b="$var2" 'BEGIN {print a,b}'
সতর্কতা । এড মর্টন যেমন লিখেছেন, এস্কেপ সিকোয়েন্সগুলি ব্যাখ্যা করা হবে তাই \tআসল হয়ে ওঠে tabএবং \tযদি এটি আপনি অনুসন্ধান করেন তবে তা নয় । ENVIRON[]এটি ব্যবহার করে বা এর মাধ্যমে অ্যাক্সেসের মাধ্যমে সমাধান করা যেতে পারেARGV[]
পিএস যদি আপনি পৃথক হিসাবে তিনটি উল্লম্ব বার পছন্দ করেন তবে |||এটি এড়ানো যায় না, তাই ব্যবহার করুন-F"[|][|][|]"
প্রোগ্রাম / ফাংশন सराণ থেকে ডেটা পাওয়ার উদাহরণ উদাহরণ awk(এখানে তারিখটি ব্যবহৃত হয়)
awk -v time="$(date +"%F %H:%M" -d '-1 minute')" 'BEGIN {print time}'
কোড ব্লকের পরে পরিবর্তনশীল
এখানে আমরা awkকোডের পরে ভেরিয়েবল পাই । BEGINব্লকটিতে আপনার চলকের প্রয়োজন না থাকলে এটি কাজ করবে :
variable="line one\nline two"
echo "input data" | awk '{print var}' var="${variable}"
or
awk '{print var}' var="${variable}" file
- একাধিক ভেরিয়েবল যুক্ত করা হচ্ছে:
awk '{print a,b,$0}' a="$var1" b="$var2" file
- এই পদ্ধতিতে আমরা
FSপ্রতিটি ফাইলের জন্য পৃথক ফিল্ড পৃথককারীও সেট করতে পারি ।
awk 'some code' FS=',' file1.txt FS=';' file2.ext
- কোড ব্লকের পরে পরিবর্তনশীল ব্লকের জন্য কাজ করবে না
BEGIN:
echo "input data" | awk 'BEGIN {print var}' var="${variable}"
এখানে স্ট্রিং
চলকগুলি এখানে সমর্থন করে এমন শেলগুলি (বাশ সহ) থেকে awkএকটি স্ট্রিং ব্যবহার করে যুক্ত করা যেতে পারে :
awk '{print $0}' <<< "$variable"
test
এটি যেমন:
printf '%s' "$variable" | awk '{print $0}'
PS এই পরিবর্তনশীলটিকে একটি ফাইল ইনপুট হিসাবে বিবেচনা করে।
ENVIRON ইনপুট
ট্রুওয়াই যেমন লিখেছেন, আপনি পরিবেশ পরিবর্তনশীলগুলিENVIRON মুদ্রণের জন্য এটি ব্যবহার করতে পারেন । এডাব্লুকে চালানোর আগে একটি ভেরিয়েবল সেট করা, আপনি এটি এর মতো মুদ্রণ করতে পারেন:
X=MyVar
awk 'BEGIN{print ENVIRON["X"],ENVIRON["SHELL"]}'
MyVar /bin/bash
ARGV ইনপুট
স্টিভেন পেনি যেমন লেখেন, ARGVততক্ষণে আপনি তথ্যটি বিশৃঙ্খলাতে আনতে ব্যবহার করতে পারেন :
v="my data"
awk 'BEGIN {print ARGV[1]}' "$v"
my data
কোডটি নিজেই ডেটা পেতে কেবল শুরুই নয়:
v="my data"
echo "test" | awk 'BEGIN{var=ARGV[1];ARGV[1]=""} {print var, $0}' "$v"
my data test
কোডের মধ্যে পরিবর্তনশীল: সতর্কতার সাথে ব্যবহার করুন
আপনি awkকোডের মধ্যে একটি ভেরিয়েবল ব্যবহার করতে পারেন তবে এটি অগোছালো এবং পড়া শক্ত এবং আপনার Charles Duffyপয়েন্ট হিসাবে এই সংস্করণটি কোড ইঞ্জেকশনেরও শিকার হতে পারে। কেউ যদি ভেরিয়েবলে খারাপ জিনিস যুক্ত করে, awkকোডের অংশ হিসাবে এটি কার্যকর করা হবে ।
কোডের মধ্যে ভেরিয়েবলটি বের করে এটি কাজ করে, তাই এটি এর একটি অংশে পরিণত হয়।
আপনি যদি awkভেরিয়েবলের ব্যবহারের সাথে পরিবর্তনশীল পরিবর্তন করতে চান তবে আপনি এটি এভাবে করতে পারেন তবে সাধারণ ভেরিয়েবলের জন্য এটি ব্যবহার করবেন না।
variable="line one\nline two"
awk 'BEGIN {print "'"$variable"'"}'
line one
line two
কোড ইঞ্জেকশনের উদাহরণ এখানে:
variable='line one\nline two" ; for (i=1;i<=1000;++i) print i"'
awk 'BEGIN {print "'"$variable"'"}'
line one
line two
1
2
3
.
.
1000
আপনি awkএইভাবে প্রচুর কমান্ড যুক্ত করতে পারেন । এমনকি এটি বৈধ কমান্ডের সাহায্যে ক্রাশ করুন।
অতিরিক্ত তথ্য:
ডাবল উদ্ধৃতি ব্যবহার
কোট ভেরিয়েবলের দ্বিগুণ করা সর্বদা ভাল "$variable"
যদি না তবে একক লাইন একটি দীর্ঘ একক লাইন হিসাবে যুক্ত করা হবে।
উদাহরণ:
var="Line one
This is line two"
echo $var
Line one This is line two
echo "$var"
Line one
This is line two
অন্যান্য ত্রুটিগুলি আপনি ডাবল উদ্ধৃতি ছাড়াই পেতে পারেন:
variable="line one\nline two"
awk -v var=$variable 'BEGIN {print var}'
awk: cmd. line:1: one\nline
awk: cmd. line:1: ^ backslash not last character on line
awk: cmd. line:1: one\nline
awk: cmd. line:1: ^ syntax error
এবং একক উদ্ধৃতি সহ, এটি ভেরিয়েবলের মান প্রসারিত করে না:
awk -v var='$variable' 'BEGIN {print var}'
$variable
AWK এবং ভেরিয়েবল সম্পর্কে আরও তথ্য
এই প্রশ্ন জিজ্ঞাসা করুন ।