Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

what is the meaning of a[FNR]=a[FNR]?a[FNR]","$0:$0 in awk?

Tags:

awk

I know the ? is for something like

(condition) ? statement-1: statement-2

but, in this case I am not understanding how a[FNR]=a[FNR] is working, when is this false?

awk '{a[FNR]=a[FNR] ? a[FNR]","$0 : $0} END{for(i=1;i<=FNR;i++)print a[i]}' *.csv
like image 780
emge Avatar asked Dec 13 '22 07:12

emge


1 Answers

a[FNR]=a[FNR] ? a[FNR]","$0 : $0

Here ? is a ternary operator. Where condition is just a[FNR]. Where a is an associative array.

It means if a[FNR] is not empty and non-zero then set a[FNR] = a[FNR] "," $0 expression otherwise set a[FNR] = $0.

In other words it is equivalent of:

if (a[FNR]) {
   a[FNR] = a[FNR] "," $0
} else {
   a[FNR] = $0
}

Correct approach is to use it this way as Ed rightly suggest in comments:

a[FNR] = (FNR in a ? a[FNR] "," : "") $0
like image 129
anubhava Avatar answered Feb 27 '23 02:02

anubhava