मेरे पास 1000 से 2000 कॉलम और 3000 से अधिक पंक्तियों की डेटा फ़ाइल है।

इनपुट उदाहरण डेटा

GO:0009987 Os760  Os840  Os550  Os380  Os590  Os340
GO:0043170 Os610  Os043  Os035

अपेक्षित उत्पादन:

GO:0009987 Os760  
GO:0009987 Os840  
GO:0009987 Os550  
GO:0009987 Os380  
GO:0009987 Os590
GO:0009987 Os340
GO:0043170 Os610
GO:0043170 Os043 
GO:0043170 Os035

मैंने यह कोशिश की:

sed 's/ /\n/2; P; D' filename | awk 'NF==2 {a =$1;b=$2; print; next} {print a,$0}'

लेकिन यह मुझे इस तरह परिणाम देता है। (with one extra GO value in column 1). मैं फ़ाइल से इस अतिरिक्त GO को हटाना चाहता हूं।

GO:0009987 Os760  
GO:0009987 Os840  
GO:0009987 Os550  
GO:0009987 Os380  
GO:0009987 Os590
GO:0009987 Os340
GO:0009987
GO:0043170 Os610
GO:0043170 Os043 
GO:0043170 Os035
GO:0043170
1
Ravi Saroch 13 नवम्बर 2019, 10:01

2 जवाब

सबसे बढ़िया उत्तर

क्या आप कृपया निम्नलिखित प्रयास कर सकते हैं (सुदीप सर की टिप्पणियों के अनुसार सीमित चयन को बदल दिया)।

awk '{for(i=2;i<=NF;i++){print $1,$i}}' Input_file

या कोशिश करें:

awk 'BEGIN{FS=":| +"} {for(i=3;i<=NF;i++){print $1":"$2,$i}}' Input_file

या:

awk -F':| +' '{for(i=3;i<=NF;i++){print $1":"$2,$i}}' Input_file
3
Ravi Saroch 13 नवम्बर 2019, 11:33

मुझे अपनी इनपुट फ़ाइल में छोटी सी गलती दिखाई देती है। अन्यथा यह भी ठीक काम करता है:

sed 's/ /\n/2; P; D' filename | awk 'NF==2 {a =$1;b=$2; print; next} {print a,$0}'
2
Ravi Saroch 13 नवम्बर 2019, 10:43