unix - Transpose using AWK -
संभव डुप्लिकेट:
नमस्ते मैं नीचे प्रारूप में एक आउटपुट फ़ाइल प्राप्त करने के लिए AWK का उपयोग करना चाहूंगा मेरी इनपुट फ़ाइल एक स्थान से अलग पाठ फ़ाइल है I इससे संबन्धित किसी भी मदद का स्वागत किया जाएगा। धन्यवाद
इनपुट फ़ाइल
आईडी मात्रा रंग आकार आकार आकार आकार आकार आकार आकार 1 10 नीले वर्ग 10 लाल त्रिकोण 12 गुलाबी सर्कल 20 2 12 पीला पेंटागन 3 नारंगी आयत 4 बैंगनी अंडाकार 6वांछित आउटपुट
आईडी रंग आकृति का आकार 1 नीला वर्ग 10 1 लाल त्रिकोण 12 1 गुलाबी सर्कल 20 2 पीले पेंटागन 3 2 नारंगी आयत 4 2 बैंगनी अंडाकार 6यह सामान्यीकृत है ताकि आप नाम से आउटपुट के लिए कॉलम चुन सकें। मैंने इसे इनपुट डेटा में अतिरिक्त कॉलमों के साथ परीक्षण किया है और वे अपनी स्थिति की परवाह किए बिना उत्पादन प्राप्त नहीं करते हैं।
#! / Usr / bin / awk -f BEGIN {col_list = "color आकृति आकार "# प्रारूप में स्ट्रिंग (उदाहरण के लिए% 6dB) के पहले या # के बाद में रिक्त स्थान जोड़ने के लिए एक बी (" रिक्त ") का प्रयोग करें, लेकिन आम तौर पर संख्यात्मक तर्क का उपयोग करें col_fmt ="% -12s% -14s% 5d "# कई पंक्तियों पर दोहराया जाने वाला कॉलम # इनपुट में कहीं भी दिखाई दे सकता है, लेकिन रेखा दोहराए गए फ़ील्ड ["id"] # की शुरुआत में ये आउटपुट होंगे, क्योंकि ये व्यक्तिगत रूप से सेट हैं हम बी repeat_fmt ["id" ] = "% 4d" # प्रत्येक पंक्ति #repeat_fields ["another"] #repeat_fields ["another"] = "% 8s" ncols = split (col_list, cols) विभाजित (col_fmt, fmts) के लिए (i = 1; i & lt; = ncols; i ++) {col_names [cols [i]] रूप [कॉलम [i]] = fmts [i]}} # हेडर लाइन एफएनआर का उपयोग करते हुए कॉलम की स्थिति को बचाने == 1 {के लिए (I = 1; i & lt; = NF; i ++) {यदि (दोहराना में $ i) {repeat [++ nrepeats] = i repeat_look [i] = i rformats [i] = Repeat_fmt [$ i]} अगर (col_names में $ i) {col_nums [++ n] = i col_look [i] = i स्वरूप [i] = रूप [$ i]}} # हेडर लाइन को प्रिंट करें (i = 1 ; मैं & lt; = nrepeats; I ++) (f = rformats [repeat [i]] sub ("d", "s", f) gsub ("b", "", f) printf f, $ repeat [i]} के लिए (i = 1; I & lt; = ncols; i ++) {f = स्वरूप [col_nums [i]] उप ("डी", "एस", एफ) gsub ("बी", "", एफ) printf f, $ col_nums [i]} Printf "\ n" अगली} {for (i = 1; i & lt; = NF; i ++) {यदि (i repeat_look) {f = rformats [i] gsub ("B", "", f) repeat_out = repeat_out Sprintf (f, $ i)} अगर (मैं col_look में) {f = स्वरूप [i] gsub ("B", "", f) बाहर = बाहर sprintf (f, $ i) coln ++} अगर (coln == ncols ) {Print repeat_out out out = "" coln = 0}} repeat_out = ""}इस संशोधित इनपुट डेटा के साथ:
कोई आईडी रंग का आधार आकार का आकार आकार के आकार का आकार आकार के आकार का आकार 14 1 नीला बीस वर्ग 10 लाल त्रिकोण 12 गुलाबी सर्कल 20 ऊन 23 2 पीला नब्बे पेंटागन 3 नारंगी आयत 4 बैंगनी अंडाकार 6 कपासउत्पादन है: <पूर्व>
आईडी रंग आकार का आकार 1 नीला वर्ग 10 1 लाल त्रिकोण 12 1 गुलाबी सर्कल 20 2 पीले पेंटागन 3 2 नारंगी आयत 4 2 बैंगनी अंडाकार 6
Comments
Post a Comment