awk - Unix separate string line with delimiter -


i have few line of string in txt file this:

input.txt-->

abc;def;ghi jklm;mno pqr; abcde;fgh;ijk lmno;pqrs tuv; 

my code this. did not work space. please help.

awk -f";" '{print $1,$2,$3,$4}' input.txt | while read var1     var2 var3 var4   echo 'var1 = ' $var1  echo 'var2 = ' $var2  echo 'var3 = ' $var3  echo 'var4 = ' $var4 done 

desired output-->

var1 = abc var2 = def var3 = ghi jklm var4 = mno pqr  var1 =abcde var2 =fgh var3 =ijk lmno var4 =pqrs tuv 

this can make it:

while ifs=';' read -r val1 val2 val3 val4   echo "val1 = $val1"   echo "val2 = $val2"   echo "val3 = $val3"   echo "val4 = $val4" done < input.txt 

the basic aspect take consideration ifs=";" defines input field separator. read -r val1 .. val4 indicate variables defined.

it can easier awk:

$ awk -f";" '{for (i=1; i<nf; i++) {print "val"i,"=",$i}}' input.txt 

it defines ; field separator -f ";". loops through these fields for i , prints them. nf indicates number of fields , loop nf-1 last empty 1 not shown. thanks js웃 tip :)

test

$ while ifs=';' read -r val1 val2 val3 val4; echo "val1 = $val1"; echo "val2 = $val2"; echo "val3 = $val3"; echo "val4 = $val4"; echo; done < val1 = abc val2 = def val3 = ghi jklm val4 = mno pqr  val1 = abcde val2 = fgh val3 = ijk lmno val4 = pqrs tuv 

awk version:

$ awk -f";" '{for (i=1; i<nf; i++) {print "val"i,"=",$i}}' val1 = abc val2 = def val3 = ghi jklm val4 = mno pqr val1 = abcde val2 = fgh val3 = ijk lmno val4 = pqrs tuv 

Comments