এর মধ্যে শেল ভেরিয়েবলগুলি পাওয়া 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 এবং ভেরিয়েবল সম্পর্কে আরও তথ্য
এই প্রশ্ন জিজ্ঞাসা করুন ।