मैं साइट और प्रोग्रामिंग की दुनिया में नया हूं और मुझे आशा है कि आपके पास मेरी मदद करने के लिए समय होगा। मेरी समस्या इस प्रकार है: मेरे पास कई कॉलम वाली एक फाइल है। दूसरे कॉलम में मान हैं। मैं किसी दिए गए नंबर पर प्रत्येक मान के योग की गणना करने और योग के परिणामों वाले दूसरे कॉलम को एक नए कॉलम से बदलने की कोशिश कर रहा हूं। मेरे इनपुट का एक उदाहरण यहां दिया गया है:
A B C
x 1 t
y 2 u
z 3 v
मैं बी कॉलम में 5 में मानों को जोड़ना चाहता हूं और नीचे दिए गए आउटपुट को प्राप्त करना चाहता हूं:
A B C
x 6 t
y 7 u
z 8 v
जिस कोड को मैंने असफल रूप से आजमाया है वह है
zcat my_file.vcf.gz| tail -n +49 | awk 'BEGIN{FS=OFS="\t"} {print $0, $2+5}'>my.output.vcf
अग्रिम में धन्यवाद
6 जवाब
आप उपयोग कर सकते हैं
awk 'BEGIN{FS=OFS="\t"} {$2+=5}1'
यहां, $2+=5
, फाइल किए गए 2 मान में 5
जोड़ देगा, और 1
रिकॉर्ड के प्रदर्शन को ट्रिगर करेगा (पंक्ति, रेखा, print $0
के समान)।
एक ऑनलाइन awk
डेमो देखें:
#!/bin/bash
s='A B C
x 1 t
y 2 u
z 3 v'
awk 'BEGIN{FS=OFS="\t"} {$2+=5}1' <<< "$s"
आउटपुट:
A 5 C
x 6 t
y 7 u
z 8 v
cat boo
A B C
x 1 t
y 2 u
z 3 v
cat boo | awk 'BEGIN{FS=OFS="\t"} $2 ~ /^[0-9]+$/ {print $1, $2+5, $3} $2 !~ /^[0-9]+$/ {print} '
A B C
x 6 t
y 7 u
z 8 v
माउब यह आपकी मदद कर सकता है:
cat file | awk '{if (NR > 1 && $2 = ($2+5))
print $0;
else print $0;}'
उत्तर आपके कोड पर लागू होता है:
zcat my_file.vcf.gz| tail -n +49 | awk '{if (NR > 1 && $2 = ($2+5)) print $0; else print $0;}' > my.output.vcf
आप उपयोग कर सकते हैं:
awk 'BEGIN {FS=OFS="\t"} NR == 1 {print $0} NR > 1 {print $1,($2+5),$3;}'
आउटपुट:
A B C
x 6 t
y 7 u
z 8 v
स्पष्टता के लिए दूसरा रूप:
awk 'BEGIN{FS=OFS="\t"} {print $1, $2+5, $3}'
हम tail
का उपयोग करने से बच सकते हैं क्योंकि 49वीं पंक्ति से लाइनों की छपाई awk
के भीतर ही की जा सकती है। इसके अलावा आपको दूसरे क्षेत्र में मूल्य जोड़ने की जरूरत है और फिर आप पूरी लाइन को print
कमांड द्वारा ही प्रिंट कर सकते हैं।
महत्वपूर्ण बिंदु, ओपी के नमूने के अनुसार यदि दूसरे क्षेत्र में अक्षर हैं तो उसमें 5
जोड़ने की आवश्यकता नहीं है, इसलिए उस स्थिति का भी यहाँ ध्यान रखा।
zcat my_file.vcf.gz |
awk '
BEGIN{ FS=OFS="\t" }
FNR>=49{
$2=($2~/[a-zA-Z]/?$2:$2+5)
print
}
' > my.output.vcf
संबंधित सवाल
नए सवाल
awk
AWK एक व्याख्या की गई प्रोग्रामिंग भाषा है जिसे टेक्स्ट प्रोसेसिंग के लिए डिज़ाइन किया गया है और आमतौर पर इसका उपयोग डेटा निष्कर्षण और रिपोर्टिंग टूल के रूप में किया जाता है। AWK का उपयोग काफी हद तक यूनिक्स सिस्टम के साथ किया जाता है।