Col2 से col1 में स्ट्रिंग मान घटाएं और col2 को आबाद करें


-1

मेरे पास एक डेटा फ़ाइल है जो इस तरह दिखती है:

MASTER          APP                        SET       STATUS
max_mstr_ref    max_mstr_ref_horizon_biz   pp_script     true
max_mstr_ref    max_mstr_ref_horizon_biz   pp_scrpt_1    false
max_retl_len    max_retl_len_bddm_biz      px_script     true
min_min_ref     min_min_ref_HZ_Null        ap_script_2   false
...

मुझे स्तंभ 2 में दोहराए गए उपसर्ग मानों को निकालने की आवश्यकता है (उदाहरण max_mstr_refके लिए max_retl_len, min_min_refऔर स्तंभ 2 में उपसर्गों से दर्जनों अधिक पसंद है)। मैं सोच रहा था कि कॉलम 2 में मान से कॉलम 1 में मूल्य घटाना है और परिणाम के साथ कॉलम 2 को आबाद करना है। यह फ़ाइल में प्रत्येक रिकॉर्ड के लिए गतिशील रूप से किया जाना चाहिए।

मैंने कुछ awkतरीके आजमाए, लेकिन संक्षिप्त रचना करते रहे।


मुझे इनपुट में कोई C नहीं दिखाई दिया, इसलिए मैंने अभी के लिए csv टैग को छोड़ दिया।
जेफ स्कालर

आह्ह thx जेफ ... होना चाहिए था .tsv।
SSDdude

जवाबों:


1

इस बारे में कैसा है

awk '{sub($1"_", "", $2); printf("%s %s %s %s\n", $1, $2, $3, $4)}' _input_file_

यह पहले फ़ील्ड को दूसरे फ़ील्ड से निकाले जाने वाले रेगुलर एक्सप्रेशन के रूप में उपयोग करता है। 4 फ़ील्ड फिर प्रिंट आउट किए जाते हैं। मैंने "_" को नियमित अभिव्यक्ति में शामिल किया क्योंकि मुझे नहीं लगता था कि आप ऐसा चाहते थे। आउटपुट को सुशोभित करने के लिए आप प्रिंटफ़ प्रारूप स्ट्रिंग को समायोजित कर सकते हैं।


हे लुईस प्रतिक्रिया के लिए धन्यवाद, लेकिन मुझे लगता है कि यह काम करने के लिए नहीं मिल सकता है। क्या आप संभवतः इस आदेश को कैसे तोड़ सकते हैं? धन्यवाद!!
एसएसड्यूड

हम्म। सोचा मैंने किया। :) तो, उप ($ 1 " ", "", $ 2) फ़ंक्शन $ 1 का उपयोग करता है, पहला क्षेत्र, एक अंडरस्कोर जिसमें नियमित अभिव्यक्ति के रूप में जोड़ा गया है। यह दूसरे क्षेत्र में $ 2 के खिलाफ इस नियमित अभिव्यक्ति से मेल खाता है। यदि कोई मैच होता है, तो वह इसे "" के साथ बदल देगा (यानी यह एक रिक्त स्ट्रिंग के साथ $ 1 का स्थान लेगा )। इसलिए, यदि फ़ील्ड 2 फ़ील्ड 1 से शुरू होती है, तो इसे फ़ील्ड 2 से हटा दिया जाता है। यह आपका घटाव है जिसे आप खोज रहे थे। उसके बाद प्रतिस्थापन किया जाता है, यह सिर्फ 4 क्षेत्रों को प्रिंट करता है।
लुईस एम

0

यदि वह उपसर्ग हमेशा मौजूद है, तो प्रयास करें

awk 'NR == 1 || sub ($1 "_", "", $2)' OFS="\t" file
MASTER          APP         SET         STATUS
max_mstr_ref    horizon_biz pp_script   true
max_mstr_ref    horizon_biz pp_scrpt_1  false
max_retl_len    bddm_biz    px_script   true
min_min_ref     HZ_Null     ap_script_2 false
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.