मेरे पास कई प्रविष्टियों वाली एक फाइल है जिसमें आईडी और दूसरी फाइल के साथ एक अन्य फाइल है जो एक TAB द्वारा अलग-अलग क्षेत्रों में उपविभाजित है। मुझे पहली फ़ाइल के मिलान मूल्य के आधार पर दूसरी फ़ाइल के रिकॉर्ड का चयन करने की आवश्यकता है। मैंने वेब पर देखा है कि AWK सही उपकरण है (हालांकि शायद GREP सरल है), लेकिन मुझे कोई आउटपुट नहीं मिलता है।
इस उदाहरण के लिए, मैंने फ़ाइलों की तुलना में सरणियों का उपयोग किया, लेकिन awk का उपयोग करने के लिए मुझे एक अस्थायी फ़ाइल बनानी पड़ी। संक्षेप में, मुझे पहली फ़ाइल (var1) द्वारा प्रदान किए गए मूल्य के साथ दूसरी फ़ाइल (var2) के तीसरे क्षेत्र से मेल खाना चाहिए। चयन फ़ॉर्म var2 होना चाहिए: "shameText \ t someWhat \ t beta \ t thatIs", जिसमें से मैं केवल पहला फ़ील्ड प्रिंट करता हूं, इसलिए आउटपुट बस होना चाहिए: "shameText"। मैं सरणियों को असाइन करने का सही तरीका याद कर सकता हूं, लेकिन वैसे भी यह उदाहरण फाइलों पर असली मैच के लिए एक प्रॉक्सी है।
सवाल यह है: किसी चर के दर्ज और मूल्य के बीच एक मैच के आधार पर एक पंक्ति (रिकॉर्ड) या एक एकल फ़ील्ड का चयन कैसे करें?
उदाहरण:
var1="alpha beta gamma delta epsilon"
var2="
'someText somethingElse zeta someMore'
'sameText someElse kappa andMore'
'shameText someWhat beta thatIs'
'shortText moreElse theta andMore'"
echo $var2 > tempFile
for i in $var1
do
printf "i is: %s\n" $i
awk -F\t '$3 == "$i" {print $1}' tempFile
echo "next item"
done
rm tempFile
echo $var2 > tempfile
$ var2 होना चाहिए टैब और नई लाइनों को संरक्षित करने के डबल-कोटेड echo "$var2" > tempfile
। Awk लाइन में, -F विकल्प को सेट करने की आवश्यकता नहीं होती है, डिफ़ॉल्ट awk सेपरेटर रिक्त और टैब होते हैं, और चर $i
को शेल के संपर्क में होना चाहिए awk '$3 == "'$i'" {print $1}' tempFile
ध्यान दें कि awk कमांड के अंदर डबल-कोट्स हैं।
var2
जिसमें तीसरा क्षेत्रvar1
सूची में शब्द में से एक है , तो उन पंक्तियों के केवल पहले क्षेत्र को प्रिंट करेंgrep -f <(tr ' ' '\n' <file-with-IDs) file-with-fields | cut -f1