मेरे पास निम्न टेक्स्ट फ़ाइल है:

cat file.txt

name        value
ID1         a;b;c
ID2         d
ID3         e;f

मैं इन्हें धुरी बनाना चाहूंगा।

वांछित आउटपुट

name        value
ID1         a
ID1         b
ID1         c
ID2         d
ID3         e
ID3         f

मैंने सोचा

Txt.awk

BEGIN { FS=OFS="\t" }

NR>1 {
     a=$1 split($2,a,";"); next
}

NR>1 {
     a=$1 for (i in a)
          print a, a[i]
     printf "\n"
}

लेकिन यह सरणियों को आरंभ करने में विफल रहता है। क्या कोई विकल्प है?

2
Shahin 3 फरवरी 2020, 07:32

1 उत्तर

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

संपादित करें: एड सर के सुझाव के अनुसार निम्नलिखित समाधान जोड़ें।

awk '
BEGIN{
  OFS="\t\t"
}
FNR==1{
  print
  next
}
{
  num=split($2,array,/;/)
  for(i=1;i<=num;i++){
    print $1,array[i]
  }
}
'  Input_file

क्या आप कृपया अनुसरण करने का प्रयास कर सकते हैं।

awk '
BEGIN{
  OFS="\t\t"
}
FNR==1{
  print
  next
}
{
  num=split($2,array,";")
  for(i=1;i<=num;i++){
    print $1,array[i]
  }
  delete array
}
'  Input_file

आउटपुट निम्नानुसार होगा।

name        value
ID1             a
ID1             b
ID1             c
ID2             d
ID3             e
ID3             f

स्पष्टीकरण: उपरोक्त कोड के लिए विस्तृत विवरण जोड़ना।

awk '                          ##Starting awk program from here.
BEGIN{                         ##Starting BEGIN section from here.
  OFS="\t\t"                   ##Setting OFS as 2 times TAB for all lines here.
}                              ##Closing BEGIN section of this code here.
FNR==1{                        ##Checking condition if line is first line then do following.
  print                        ##Printing current line here.
  next                         ##next will skip all further statements from here.
}                              ##Closing FNR==1 condition BLOCK of this program here.
{
  num=split($2,array,";")      ##Splitting 2nd field into an array named array whose delimiter is semi-colon and total number of elements will save into num variable.
  for(i=1;i<=num;i++){         ##Starting a for loop from i=1 to till value of num variable here.
    print $1,array[i]          ##Printing first field and value of array with index of variable i here.
  }
  delete array                 ##Deleting array here.
}
'  Input_file                  ##Mentioning Input_file name here.
5
kvantour 13 फरवरी 2020, 00:45