Is there a way to completely delete fields in awk, so that extra delimiters do not print?
awk
Solution
This is an oldie but goodie.
As Jonathan points out, you can't delete fields in the middle, but you can replace their contents with the contents of other fields. And you can make a reusable function to handle the deletion for you.
$ cat test.awk
function rmcol(col, i) {
for (i=col; i<NF; i++) {
$i = $(i+1)
}
NF--
}
{
rmcol(3)
}
1
$ printf 'one two three four\ntest red green blue\n' | awk -f test.awk
one two four
test red blue
Problem
Consider the following command: ``` $ gawk -F"\t" "BEGIN{OFS=\"\t\"}{$2=$3=\"\"; print $0}" Input.tsv ``` When I set `$2 = $3 = ""`, the intended effect is to get the same effect as writing: ``` print $1,$4,$5...$NF ``` However, what actually happens is that I get two empty fields, with the extra field delimiters still printing. Is it possible to actually delete `$2` and `$3`? Note: If this was on Linux in `bash`, the correct statement above would be the following, but Windows does not handle single quotes well in `cmd.exe`. ``` $ gawk -F'\t' 'BEGIN{OFS="\t"}{$2=$3=""; print $0}' Input.tsv ```