了解 awk 命令;分割、重复和 ORS

了解 awk 命令;分割、重复和 ORS

我有一段代码,我正在尝试分解和破译。我需要有人可以引导我完成每一步中发生的事情:

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=""
}

相关内容