मुझे एक फ़ाइल मिली है जिसमें key=value
जोड़े की एक सूची है, प्रत्येक अपनी लाइन पर। शैल कमांड का उपयोग करके निर्दिष्ट कुंजी के मान को लाने का सबसे अच्छा तरीका क्या है?शैल आदेश कुंजी मान जोड़े से मेल खाने के लिए
उत्तर
grep "key" my_file | cut -d'=' -f2
@mouviciel, गलत टिप्पणी स्थान साथी? (-: –
क्या होगा यदि फ़ाइल में कुंजी = मान पैरामीटर की क्षैतिज सूची है? – CMCDragonkai
पोस्टर ने कहा "प्रत्येक अपनी लाइन पर"। लेकिन हाँ, यदि प्रति पंक्ति एक से अधिक थे तो यह काम नहीं करेगा। –
यह मैं कैसे ksh में ऐसा क्या है।
FOO=$(grep "^key=" $filename | awk -F"=" '{print $2}')
आप अजीब के बजाय कट का भी उपयोग कर सकते हैं। यदि आप किसी कुंजी के साथ कुंजी जोड़ी को सीमित करते हैं तो आप -F "=" को छोड़ सकते हैं।
grep हो सकता है छोड़ा गया। यह सब कुछ कर सकता है। 'awk -F "="'/^ key =/{print $ 2} '' – ghostdog74
read -r -p "Enter key to fetch: " key
awk -vk="$key" -F"=" '$1~k{ print "value for "k" is "$2} ' file
उत्पादन
$ ./shell.sh
Enter key to fetch: key1
value for key1 is value1
या तुम सिर्फ खोल उपयोग कर सकते हैं (उदाहरण के लिए बैश)
read -r -p "Enter key to fetch: " key
while IFS="=" read -r k v
do
case "$k" in
*"$key"*) echo "value of key: $k is $v";;
esac
done <"file"
को regexp की भी आवश्यकता नहीं हो सकती है:' awk ... '$ 1 == k {print $ 2}' फ़ाइल ' –
निर्भर करता है। यदि ओपी को सटीक मिलान की आवश्यकता है। यदि नहीं, तो regexp उपयुक्त है। ओपी एक एसक्यूएल "जैसे" regexp के बराबर लागू कर सकता है। – ghostdog74
उपरोक्त awk कमांड Solaris के साथ काम नहीं करता है। – JonnyWizz
सीमा, सी, या बैश खोल – live2dream95
मैं इस के साथ समाप्त हो गया: grep "कुंजी "फाइलनाम | sed '/ key = //' – live2dream95