I was trying to use awk to convert a space delimited file into a tab delimited file. To my surprise this didn\'t work as expected:
awk -vOFS=$\'\\t\' \'{print}\'
awk -v OFS='\t' '{$1=$1}1' file
can be further truncated down to
mawk 'BEGIN {OFS="\t"} (NF==1) || ($1=$1)' file.
$1 = $1 isn't free. NF==1 will bypass it for any row that just happens to not have any spaces (just more flexible generic solution). Successful $1 = $1 returns true so the extra } 1' outside the braces is slightly superfluous.
Try this:
awk -v OFS='\t' '{$1=$1}1' file
If you just set OFS, it does not do anything. By setting $1
to $1
it will use the OFS since field has changed. 1
is always true, so it will print the line. Same as {print}