我有一段代码,我正在尝试分解和破译。我需要有人可以引导我完成每一步中发生的事情:
FNR==NR {
if (split($1,a, "_") ==3)
f1[$1]
next
}
NF{
if (split($1, a, "_") ==3 && $1 in f1)
p=1
rec=(!rec)?$0:rec ORS $0
next
}
p{
print rec ORS
p=0; rec=""
}
答案1
NR
是已处理的记录总数(包括当前正在处理的记录);FNR
是处理的记录数在当前文件中。这只会发生在第一个文件上。
FNR==NR {
if (split($1,a, "_") ==3)
f1[$1]
next
}
同样,NF
是当前记录中的字段数。如果它是空行,则该值为零,这是“假”(与“真”相反),因此该块将仅针对非空行执行。记下该块中p
设置 的值的代码;这稍后会很重要。 ORS
是输出记录分隔符;这就是每条记录在写出时的区别。默认情况下是换行符。这里有条件地用作rec
变量的值。
NF{
if (split($1, a, "_") ==3 && $1 in f1)
p=1
rec=(!rec)?$0:rec ORS $0
next
}
p
仅当 的值为“true”时,最后一个块才会运行。
p{
print rec ORS
p=0; rec=""
}