linux - Print out all remaining variables in awk -
i trying write quick awk script converts lines in format:
aaaa bbbb cccc dddd...   to
cccc aaaa bbbb dddd...   this script:
{ printf "%s %s %s %s", $3, $1, $2, $4 };   this works fine except when original input line has more 4 tokens, in case 5th , following tokens not printed.
i checked answers, using awk print columns nth last rely on setting variables "" seems cause problems if variables reused later.
is there easy way replace $4 "the substring $4 until end of line"?
in simple case need is:
$ awk '{t=$3; $3=$2; $2=$1; $1=t}1' file cccc aaaa bbbb dddd   but in general gnu awk gensub(), \s , \s:
$ awk '{print $3, $1, $2, gensub(/^\s*(\s+\s+){3}/,"","")}' file cccc aaaa bbbb dddd   the gensub() skips first 3 fields , leave fields , spaces between fields as-is point on:
$ cat file aaaa bbbb cccc dddd    eeee    ffff  gggg  $ awk '{print $3, $1, $2, gensub(/^\s*(\s+\s+){3}/,"","")}' file cccc aaaa bbbb dddd    eeee    ffff  gggg   with other awks can same match()+substr():
$ awk '{match($0,/^[[:space:]]*([^[:space:]]+[[:space:]]+){3}/); print $3, $1, $2, substr($0,rlength+1)}' file cccc aaaa bbbb dddd    eeee    ffff  gggg   or sub() , variable:
$ awk '{x=$0; sub(/^[[:space:]]*([^[:space:]]+[[:space:]]+){3}/,"",x); print $3, $1, $2, x}' file cccc aaaa bbbb dddd    eeee    ffff  gggg      
Comments
Post a Comment