awk
बिल्ट-इन चर
खोज…
एफएस - फील्ड सेपरेटर
प्रत्येक रिकॉर्ड को कई क्षेत्रों में विभाजित करने के लिए awk द्वारा उपयोग किया जाता है:
echo "a-b-c
d-e-f" | awk 'BEGIN {FS="-"} {print $2}'
में परिणाम होगा:
b
e
चर FS विकल्प -F का उपयोग करके भी सेट किया जा सकता है:
echo "a-b-c
d-e-f" | awk -F '-' '{print $2}'
डिफ़ॉल्ट रूप से, फ़ील्ड को व्हॉट्सएप (रिक्त स्थान और टैब) द्वारा अलग किया जाता है और एक ही विभाजक के रूप में कई रिक्त स्थान और टैब की गणना की जाती है।
RS - रिकॉर्ड सेपरेटर
Awk द्वारा इनपुट को कई रिकॉर्ड्स में विभाजित करने के लिए उपयोग किया जाता है। उदाहरण के लिए:
echo "a b c|d e f" | awk 'BEGIN {RS="|"} {print $0}'
पैदा करता है:
a b c
d e f
डिफ़ॉल्ट रूप से, रिकॉर्ड विभाजक न्यूलाइन वर्ण है।
इसी प्रकार: इको "एबीसी | डी एफ" awk 'BEGIN {RS = "|"} {प्रिंट $ 2}'
पैदा करता है:
b
e
OFS - आउटपुट फील्ड सेपरेटर
Awk द्वारा print स्टेटमेंट द्वारा फ़ील्ड फ़ील्ड आउटपुट को अलग करने के लिए उपयोग किया जाता है। उदाहरण के लिए:
echo "a b c
d e f" | awk 'BEGIN {OFS="-"} {print $2, $3}'
पैदा करता है:
b-c
e-f
डिफ़ॉल्ट मान है , एक स्ट्रिंग जिसमें एक सिंगल स्पेस होता है।
ओआरएस - आउटपुट रिकॉर्ड सेपरेटर
Awk द्वारा अलग-अलग रिकॉर्ड के लिए उपयोग किया जाता है और हर print स्टेटमेंट के अंत में आउटपुट होता है। उदाहरण के लिए:
echo "a b c
d e f" | awk 'BEGIN {ORS="|"} {print $2, $3}'
पैदा करता है:
b c|e f
डिफ़ॉल्ट मान is \n (newline वर्ण)।
ARGV, ARGC - कमांड लाइन आर्गुमेंट्स का एरियर
कमांड लाइन तर्क को ARGV के लिए ARGC तत्वों के आंतरिक सरणी ARGV में संग्रहीत किया जाता है। सरणी का पहला तत्व प्रोग्राम का नाम है। उदाहरण के लिए:
awk 'BEGIN {
for (i = 0; i < ARGC; ++i) {
printf "ARGV[%d]=\"%s\"\n", i, ARGV[i]
}
}' arg1 arg2 arg3
पैदा करता है:
ARGV[0]="awk"
ARGV[1]="arg1"
ARGV[2]="arg2"
ARGV[3]="arg3"
एफएस - फील्ड सेपरेटर
चर FS का उपयोग इनपुट क्षेत्र विभाजक को सेट करने के लिए किया जाता है। awk , स्पेस और टैब डिफॉल्ट फील्ड सेपरेटर्स के रूप में कार्य करते हैं। संबंधित फ़ील्ड मान को $1 , $2 , $3 ... और इसी तरह से एक्सेस किया जा सकता है।
awk -F'=' '{print $1}' file
-
-F- इनपुट क्षेत्र विभाजक की स्थापना के लिए कमांड-लाइन विकल्प।
awk 'BEGIN { FS="=" } { print $1 }' file
OFS - आउटपुट फील्ड सेपरेटर
इस चर का उपयोग आउटपुट फ़ील्ड विभाजक को सेट करने के लिए किया जाता है जो डिफ़ॉल्ट रूप से एक स्थान है।
awk -F'=' 'BEGIN { OFS=":" } { print $1 }' file
उदाहरण:
$ cat file.csv
col1,col2,col3,col4
col1,col2,col3
col1,col2
col1
col1,col2,col3,col4,col5
$ awk -F',' 'BEGIN { OFS="|" } { $1=$1 } 1' file.csv
col1|col2|col3|col4
col1|col2|col3
col1|col2
col1
col1|col2|col3|col4|col5
$1=$1 $1 में $1 से $1 को असाइन करना एक फ़ील्ड (इस मामले में $1 ) को संशोधित करता है और इसके परिणामस्वरूप awk रिकॉर्ड $0 पुनर्निर्माण करता है। रिकॉर्ड को फिर से बनाने से डेलिमीटर FS को OFS साथ बदल दिया जाता है।
RS - इनपुट रिकॉर्ड सेपरेटर
इस चर का उपयोग इनपुट रिकॉर्ड विभाजक को सेट करने के लिए किया जाता है, डिफ़ॉल्ट रूप से एक नई पंक्ति के द्वारा।
awk 'BEGIN{RS=","} {print $0}' file
ओआरएस - आउटपुट रिकॉर्ड सेपरेटर
इस चर का उपयोग आउटपुट रिकॉर्ड विभाजक को सेट करने के लिए किया जाता है, डिफ़ॉल्ट रूप से एक नई पंक्ति के द्वारा।
awk 'BEGIN{ORS=","} {print $0}' file
एनएफ - फ़ील्ड की संख्या
यह चर आपको वर्तमान इनपुट रिकॉर्ड में कुल फ़ील्ड देगा।
awk -F',' '{print NF}' file.csv
उदाहरण:
$ cat file.csv
col1,col2,col3,col4
col1,col2,col3
col1,col2
col1
col1,col2,col3,col4,col5
$ awk -F',' '{print NF}' file.csv
4
3
2
1
5
एनआर - रिकॉर्ड की कुल संख्या
वर्तमान awk आवृत्ति में संसाधित रिकॉर्ड की कुल संख्या प्रदान करेगा।
cat > file1
suicidesquad
harley quinn
joker
deadshot
cat > file2
avengers
ironman
captainamerica
hulk
awk '{print NR}' file1 file2
1
2
3
4
5
6
7
8
उदाहरण में कुल 8 रिकॉर्ड पर कार्रवाई की गई।
FNR - फाइल में रिकॉर्ड की संख्या
प्रदान करता है द्वारा संसाधित रिकॉर्ड की कुल संख्या awk उदाहरण रिश्तेदार फ़ाइलों के लिए awk प्रसंस्करण है
cat > file1
suicidesquad
harley quinn
joker
deadshot
cat > file2
avengers
ironman
captainamerica
hulk
awk '{print FNR}' file1 file2
1
2
3
4
1
2
3
4
प्रत्येक फ़ाइल में 4 लाइनें होती थीं, इसलिए जब भी awk सामना FNR था, EOF FNR 0 पर रीसेट हो जाता था।
एनएफ - फ़ील्ड की संख्या
प्रत्येक रिकॉर्ड में कॉलम या फ़ील्ड की संख्या प्रदान करता है (रिकॉर्ड प्रत्येक पंक्ति से मेल खाती है)। प्रत्येक पंक्ति को RS द्वारा सीमांकित किया जाता है जो न्यूलाइन को चूकता है।
cat > file1
Harley Quinn Loves Joker
Batman Loves Wonder Woman
Superman is not dead
Why is everything I type four fielded!?
awk '{print NF}' file1
4
4
4
7
FS (कहीं न कहीं) टैब या स्पेस में डिफॉल्ट करता है। इसलिए हार्ले, क्विन, लव्स, जोकर प्रत्येक को कॉलम माना जाता है। मामला अगली दो पंक्तियों के लिए है, लेकिन अंतिम पंक्ति में 7 स्थान अलग-अलग शब्द हैं, जिसका अर्थ है 7 कॉलम।
FNR - वर्तमान रिकॉर्ड संख्या संसाधित की जा रही है
FNR में संसाधित की जा रही इनपुट फ़ाइल पंक्ति की संख्या समाहित है। इस उदाहरण में आप दूसरी फाइल को प्रोसेस करना शुरू करते समय 1 को फिर से शुरू करते हुए देखेंगे।
एक फ़ाइल के साथ उदाहरण
$ cat file1
AAAA
BBBB
CCCC
$ awk '{ print FNR }' file1
1
2
3
दो फाइलों के साथ उदाहरण
$ cat file1
AAAA
BBBB
CCCC
$ cat file2
WWWW
XXXX
YYYY
ZZZZ
$ awk '{ print FNR, FILENAME, $0 }' file1 file2
1 file1 AAAA
2 file1 BBBB
3 file1 CCCC
1 file2 WWWW
2 file2 XXXX
3 file2 YYYY
4 file2 ZZZZ
दो फ़ाइलों के साथ विस्तारित उदाहरण
FNR का पता लगाने के लिए इस्तेमाल किया जा सकता है अगर awk पहली फाइल को NR==FNR है तो NR==FNR केवल पहली फाइल के लिए ही सही है। उदाहरण के लिए, हम फाइलों से रिकॉर्ड में शामिल करना चाहते है, तो file1 और file2 अपने पर FNR :
$ awk 'NR==FNR { a[FNR]=$0; next } (FNR in a) { print FNR, a[FNR], $1 }' file1 file2
1 AAAA WWWW
2 BBBB XXXX
3 CCCC YYYY
रिकार्ड ZZZZ से file2 के रूप में याद आ रही है FNR के लिए विभिन्न अधिकतम मूल्य है file1 और file2 और वहाँ कोई भिन्न के लिए शामिल हो जाता है FNR एस।