awk अप्रत्याशित रूप से स्ट्रिंग से डॉट निकालता है


9

मैं एक .csvफ़ाइल में एक कॉलम (2 वां स्थान) जोड़ना चाहता हूं और मैं चाहता हूं कि उस कॉलम के मान तार हों और उद्धृत किए जाएं;

निम्नलिखित आदेश कॉलम को जोड़ते हैं लेकिन बिना उद्धरण के:

awk -F"," 'BEGIN { OFS = "," } {$2="2.4.0"; print}' test.csv > output.csv

निम्नलिखित दृष्टिकोण उद्धरण शामिल करता है, लेकिन किसी कारण .से यह मान से अंतिम (डॉट) निकालता है

awk -F"," 'BEGIN { OFS = "," } {$2="\""2.4.0"\""; print}' test.csv > output.csv

इसलिए मेरा मूल्य "2.40" है।

मुझे इस बारे में कैसे बर्ताव करना चाहिए?


यदि आपकी फ़ाइल में 2 या अधिक कॉलम हैं, तो आप दूसरे कॉलम को सम्मिलित या बदलना चाहते हैं?
ctac_

बस पहले एक के बाद एक कॉलम डालें
pamamol

2
ठीक है, इसलिए सम्मिलित करने के लिए, आपको उपयोग करना होगा: awk 'BEGIN {FS = OFS = ","} {$ 1 = $ 1 ", \" 2.4.0 \ ""} 1 "
ctac_

1
या awk '{उप (",", "," 2.4.0 \ ",")} 1'
ctac_

जवाबों:


12

आपको लगता है कि उद्धरण गलत हैं। आपको नीचे के रूप में करने की आवश्यकता है

awk -F"," 'BEGIN { OFS = "," } {$2="\"2.4.0\""; print}' test.csv > output.csv

यह GNU awk मैन पेज - 3.2 एस्केप सीक्वेंस में बताया गया है

कुछ पात्रों को स्ट्रिंग स्थिरांक ("foo")या रेगेक्स स्थिरांक ( /foo/) में शाब्दिक रूप से शामिल नहीं किया जा सकता है । इसके बजाय, उन्हें भागने के दृश्यों के साथ प्रतिनिधित्व किया जाना चाहिए, जो कि बैकस्लैश ( \) के साथ शुरू होने वाले चरित्र अनुक्रम हैं । एक एस्केप सीक्वेंस का एक उपयोग स्ट्रिंग में एक डबल-क्वैस कैरेक्टर को निरंतर रूप से शामिल करना है। क्योंकि एक सादा डबल उद्धरण स्ट्रिंग को समाप्त करता है, आपको स्ट्रिंग के \"एक भाग के रूप में एक वास्तविक दोहरे-उद्धरण वर्ण का प्रतिनिधित्व करने के लिए उपयोग करना चाहिए ।


जहाँ तक मैं व्यवहार के कारण को समझ सकता था, awkलगता है कि 2.4.0आपके ओपी के अतिरिक्त उद्धरणों के साथ एक संख्यात्मक शब्द के रूप में व्याख्या की गई है और पहले डॉट के बाद सटीक खोने का फैसला किया है।

अर्थात

$2="\""2.4.0"\""

बस बन जाता है

$2=""2.4.0""

जो awkअब स्ट्रिंग के रूप में नहीं समझता है। आप बस करके इस व्यवहार को पुन: पेश कर सकते हैं

awk 'BEGIN { print ""2.4.0"" }'
2.40

जो तब होता है जब आप करते हैं

awk 'BEGIN { print 2.4.0 + 0 }'

1
@roaima: मैंने जो कुछ भी जाना है, उससे ऐसा लगता है कि इसे रद्द कर दिया गया है और इसके परिणामस्वरूप { print 2.4.0 }या { print 2.4.0 + 0 }गैर-स्ट्रिंग घटक के रूप में। मैं भी प्रासंगिक डॉक्स खोज करने की कोशिश की है, लेकिन नहीं कर सका
Inian

2
मेरे द्वारा कभी-कभी उपयोग किए जाने वाले उद्धरणों को आसानी से जोड़ने का एक और तरीका है, एक चर को परिभाषित करना, जैसे:awk -v q='"' '... print q "2.4.0" q ...
Thor
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.