Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.7k views
in Technique[技术] by (71.8m points)

what is the meaning of a[FNR]=a[FNR]?a[FNR]","$0:$0 in 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
question from:https://stackoverflow.com/questions/65931608/what-is-the-meaning-of-afnr-afnrafnr-00-in-awk

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...