My Bash script:declare -a lang=('english' 'spainsh')sms=Free msg: Due to upgrades on apps youll need a new version by yyyy/mm/dd to app running. Visit a store or go to    url=google.com/UA2392 to upgrade your app. awk '{print $1 , '${servicegrade[0]}' , '${lang[1]}' ,,, '$sms' , '$url'}' inputfile.csv > inputfile.txtERROR:awk: cmd. line:1: {print $1 , 267 , en ,,, Freeawk: cmd. line:1:                                    ^ unexpected newline or end of string
AWK is throwing an error unexpected newline or end of string
bash;awk
The problem you are seeing is directly related to the way that you are quoting (or more accurately, not quoting) your awk command line and the interpolated shell variables. (Both for the shell and for awk.)You have this:awk '{print $1 , '${servicegrade[0]}' , '${lang[1]}' ,,, '$sms' , '$url'}' inputfile.csv > inputfile.txtEmpirically I can see from the error message that servicegrade=267, lang=en, sms=Free msg:..., but url is not visible (that's ok) so we'll assume url=http://example.net.The important part is to look at your quotes on the commnd line. Anything inside the 'single quotes' is treated as a single command line. If you abut a single quote against a double quote you're also ok (echo 'hello'world has a single argument). But as soon as you introduce an unquoted space it becomes a second parameter (echo 'hello' world is two words, not one). Additionally, none of your variables is quoted so any whitespace in their values will be treated by the shell as a word break.Let's assume those variables do not contain whitespace, and interpolate them into the command line, as if they were actual values rather than variables:awk '{print $1 , '267' , 'en' ,,, 'Free msg:...' , 'http://example.net'}' inputfile.csv > inputfile.txtNow we'll remove redundant quotes:awk '{print $1 , 267 , en ,,, Free msg:..., http://example.net}' inputfile.csv > inputfile.txtIt shouldn't take more than a moment to realise that awk is now seeing unquoted strings, which it cannot view as awk variables. I suspect that what you really wanted was this:awk '{print $1 ,267,en,,,Free msg:...,http://example.net}' inputfile.csv > inputfile.txt(possibly with double-quoted arguments if your output is also CSV style).We can reverse the process easily enough to allow shell variables to be interpolated, but a better approach is to assign those shell variables to awk variables and use those:awk '{print $1 , servicegrade , lang ,,, sms , url}' servicegrade=${servicegrade[0]} lang=${lang[1]} sms=$sms url=$url inputfile.csv > inputfile.txtIf you decide your output text needs double-quoted parameters, awk (well, at least my version of it) understands this sort of structure: awk '{print $1 \ servicegrade \,\ lang \,\ sms \,\ url \}'