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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With