I want to print CSV whose field count is greater than 3.
For example, CSV is below,
aaa,bbb
aaa,bbb,ccc
aaa,bbb,ccc,ddd
aaa,bbb,ccc,ddd,eee
expectation is
aaa,bbb,ccc,ddd
aaa,bbb,ccc,ddd,eee
I tried the command, but it failed. Is there a way to solve this problem?
awk -F, 'BEGIN{OFS=“,”}{$NF>=5;print}' aaa.csv
awk -F',' '{$NR>=5;print }' aaa.csv
CodePudding user response:
Simply check NF is greater than 3
awk -F',' 'NF>3{print $0}' aaa.csv
OR since awk's default behavior is to print lines(as an action) when no action is given so above could be shorten to:
awk -F',' 'NF>3' aaa.csv
CodePudding user response:
This
awk -F, 'BEGIN{OFS=“,”}{$NF>=5;print}' aaa.csv
awk -F',' '{$NR>=5;print }' aaa.csv
suggest you are misunderstanding certain features of GNU AWK.
$ is used to denote field (of row), NF is number of fields in current line, NR is number of current row. Thus $NF denotes value of last field and $NR denotes 1st field of 1st row, 2nd field of 2nd row, 3rd field of 3rd row and so on.
When you put ;-sheared action inside { and } they will be executed in such order, but your comparisons have not any side effect, so they are effectively no-operation.
print (without argument) does print line as-is, so setting OFS has not any effect at it.
If you want to know more about built-in variables then read 8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR.
